
標題
表達式 | gettype($x) | empty($x) | is_null($x) | isset($x) | boolean:if($x) |
$x=""; | string | TRUE | FALSE | TRUE | FLASE |
$x=null; | NULL | TRUE | TRUE | FLASE | FLASE |
var $x; | NULL | TRUE | TRUE | FLASE | FLASE |
$x is undefiend | NULL | TRUE | TRUE | FLASE | FLASE |
$x = array(); | array | TRUE | FLASE | TRUE | FLASE |
$x = false; | boolean | TRUE | FLASE | TRUE | FLASE |
$x = true; | boolean | FLASE | FLASE | TRUE | TRUE |
$x = 1; | integer | FLASE | FLASE | TRUE | TRUE |
$x = 42; | integer | FLASE | FLASE | TRUE | TRUE |
$x = 0; | integer | TRUE | FLASE | TRUE | FLASE |
$x = -1; | integer | FLASE | FLASE | TRUE | TRUE |
$x = "1"; | string | FLASE | FLASE | TRUE | TRUE |
$x = "0"; | string | TRUE | FLASE | TRUE | FLASE |
$x = "-1"; | string | FLASE | FLASE | TRUE | TRUE |
$x = "php"; | string | FLASE | FLASE | TRUE | TRUE |
$x = "true"; | string | FLASE | FLASE | TRUE | TRUE |
$x = "false"; | string | FLASE | FLASE | TRUE | TRUE |
聲明
由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,雷神眾測以及文章作者不為此承擔任何責任。雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用于商業目的。
No.1
語法&定義&注釋
查詢字符串解析到變量,首先看一下parse_str()函數:語法:parse_str(string,array)
定義和用法:
parse_str() 函數把查詢字符串解析到變量中。注釋:
如果未設置 array 參數,則由該函數設置的變量將覆蓋已存在的同名變量。注釋:
php.ini 文件中的 magic_quotes_gpc 設置影響該函數的輸出。如果已啟用,那么在 parse_str() 解析之前,變量會被 addslashes() 轉換。
No.2
如何繞過waf程序規則
TL;DR,PHP將查詢字符串(在URL或body中)轉換為$_GET或$_POST中的數組。例如:/?foo=bar變成Array([foo] => "bar"),查詢字符串解析過程使用下劃線刪除或替換參數名稱中的某些字符。
例如/?%20wenson[id%00=42]轉換為Array([wenson_id] => 42)
如果遇到waf對wenson_id的值進行攔截時,怎么樣使用濫用PHP查詢字符串解析器來繞過WAF,可以通過以下面方式來繞過這個解析過程:
/wenson.php?%20wenson[id%00=42"+AND+1=0—在PHP中,上面的示例%20wenson[id%00]中的參數名的值將存儲為$_GET["wenson_id"]。
PHP需要將所有參數轉換為一個有效的變量名,因此當解析查詢字符串時,它主要做兩件事:
刪除初始空格將一些字符轉換為下劃線(包括空格)
通過如下所示的簡單循環,您可以使用parser_str函數發現哪個字符被刪除或轉換為下劃線:
在這里可以用foo_bar的值進行fuzz測試,“[X]foo[X]bar[X]”是[X]的標記位,對這個標記位進行測試,如果web服務器接受帶點或空白的標題名稱,也會發生類似的事情。
可以對fuzz測試的一些點:
接下來進行拆分,進行分析:
[1st]foo_barfoo[2nd]barfoo_bar[3rd]
可以看出foo%20bar 等同于 foo+bar ,并且可以被解析為foo bar。如果使用一個正則規則來匹配時:
alert http any any -> $HOME_NET any (\msg: "Block SQLi"; flow:established,to_server;\ content: "POST"; http_method;\ pcre: "/wenson_id=[^0-9]+/Pi";\ sid:1234567;\)
可以使用下面的方式進行繞過:
/?wenson**[**id=1%22+AND+1=1--'/?wenson**%5b**id=1%22+AND+1=1--'/?wenson_id**%00**=1%22+AND+1=1--'
如果像ModSecurity的話,使用這個規則的話SecRule !ARGS:wenson_id "@rx ^[0-9]+$",以上的方式是不成功的,
所以在有時候可以這樣子繞過waf:所以在繞PHP文件中,遇到類似的parse_str()函數時,可以嘗試去繞過。
/test.php?tt<span style="color:#ab4642">%00</span>=1&%20wenson=fsf23424234234ffsdfds
等同于下面的URL地址:
/test.php?tt=1&wenson=fsf23424234234ffsdfds
No.3
尾言
最后,文章的內容部分參考互聯網的文章來寫,在繞過的過程中,多嘗試一下PHP替代函數進行繞waf。
招聘啟事
安恒雷神眾測SRC運營(實習生)————————【職責描述】1. 負責SRC的微博、微信公眾號等線上新媒體的運營工作,保持用戶活躍度,提高站點訪問量;2. 負責白帽子提交漏洞的漏洞審核、Rank評級、漏洞修復處理等相關溝通工作,促進審核人員與白帽子之間友好協作溝通;3. 參與策劃、組織和落實針對白帽子的線下活動,如沙龍、發布會、技術交流論壇等;4. 積極參與雷神眾測的品牌推廣工作,協助技術人員輸出優質的技術文章;5. 積極參與公司媒體、行業內相關媒體及其他市場資源的工作溝通工作?!救温氁蟆?1. 責任心強,性格活潑,具備良好的人際交往能力; 2. 對網絡安全感興趣,對行業有基本了解; 3. 良好的文案寫作能力和活動組織協調能力。
簡歷投遞至 strategy@dbappsecurity.com.cn
設計師(實習生)
————————
【職位描述】負責設計公司日常宣傳圖片、軟文等與設計相關工作,負責產品品牌設計?!韭毼灰蟆?、從事平面設計相關工作1年以上,熟悉印刷工藝;具有敏銳的觀察力及審美能力,及優異的創意設計能力;有 VI 設計、廣告設計、畫冊設計等專長;2、有良好的美術功底,審美能力和創意,色彩感強;精通photoshop/illustrator/coreldrew/等設計制作軟件;3、有品牌傳播、產品設計或新媒體視覺工作經歷;【關于崗位的其他信息】企業名稱:杭州安恒信息技術股份有限公司辦公地點:杭州市濱江區安恒大廈19樓學歷要求:本科及以上工作年限:1年及以上,條件優秀者可放寬
簡歷投遞至 strategy@dbappsecurity.com.cn
安全招聘————————公司:安恒信息崗位:Web安全 安全研究員部門:戰略支援部薪資:13-30K工作年限:1年+工作地點:杭州(總部)、廣州、成都、上海、北京
工作環境:一座大廈,健身場所,醫師,帥哥,美女,高級食堂…【崗位職責】1.定期面向部門、全公司技術分享;2.前沿攻防技術研究、跟蹤國內外安全領域的安全動態、漏洞披露并落地沉淀;3.負責完成部門滲透測試、紅藍對抗業務;4.負責自動化平臺建設5.負責針對常見WAF產品規則進行測試并落地bypass方案【崗位要求】1.至少1年安全領域工作經驗;2.熟悉HTTP協議相關技術3.擁有大型產品、CMS、廠商漏洞挖掘案例;4.熟練掌握php、java、asp.net代碼審計基礎(一種或多種)5.精通Web Fuzz模糊測試漏洞挖掘技術6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法7.有過獨立分析漏洞的經驗,熟悉各種Web調試技巧8.熟悉常見編程語言中的至少一種(Asp.net、Python、php、java)【加分項】1.具備良好的英語文檔閱讀能力;2.曾參加過技術沙龍擔任嘉賓進行技術分享;3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相關資質者;4.具有大型SRC漏洞提交經驗、獲得年度表彰、大型CTF奪得名次者;5.開發過安全相關的開源項目;6.具備良好的人際溝通、協調能力、分析和解決問題的能力者優先;7.個人技術博客;8.在優質社區投稿過文章;
崗位:安全紅隊武器自動化工程師薪資:13-30K工作年限:2年+工作地點:杭州(總部)【崗位職責】1.負責紅藍對抗中的武器化落地與研究;2.平臺化建設;3.安全研究落地?!緧徫灰蟆?.熟練使用Python、java、c/c++等至少一門語言作為主要開發語言;2.熟練使用Django、flask 等常用web開發框架、以及熟練使用mysql、mongoDB、redis等數據存儲方案;3:熟悉域安全以及內網橫向滲透、常見web等漏洞原理;4.對安全技術有濃厚的興趣及熱情,有主觀研究和學習的動力;5.具備正向價值觀、良好的團隊協作能力和較強的問題解決能力,善于溝通、樂于分享?!炯臃猪棥?.有高并發tcp服務、分布式等相關經驗者優先;2.在github上有開源安全產品優先;3:有過安全開發經驗、獨自分析過相關開源安全工具、以及參與開發過相關后滲透框架等優先;4.在freebuf、安全客、先知等安全平臺分享過相關技術文章優先;5.具備良好的英語文檔閱讀能力。
簡歷投遞至 strategy@dbappsecurity.com.cn
專注滲透測試技術
全球最新網絡攻擊技術
END
對于一個php程序員來說,php運行環境是我們最親密的伙伴之一,一般我們都會選擇一個集成好的運行環境在我們電腦上安裝。在我們職業生涯中用過許多的集成開發環境,比如:Xampp、Wamp、phpstudy、寶塔、upupw等等。今天要給大家推薦的是一款名叫Laragon的Windows中的php集成運行環境,其豐富的功能堪稱php集成環境界的全家桶,下面我們一起看一看。
Laragon
完美支持laravelLaragon專注于性能 - 圍繞穩定性,簡單性,靈活性和自由度而設計,非常適合構建和管理現代Web應用程序。
Laragon有自己的service orchestration異步和非阻塞管理服務,可自動創建虛擬主機,所以你會發現Laragon可以快速順暢地運行。
Laragon對 Laravel 非常友好,相信不少人在windows下開發搭建laravel官方推薦的運行環境Homestead 時吃過不少的虧,下載了一堆軟件,安裝完卻搞不明白要怎么組合在一起運行起來,而Laragon完美支持laravel。
Laragon可以將PHP,Python,Node.js,Java,Golang,Ruby集于一身,支持Mariadb,MySQL,Redis,Memcached,Postgresql,Mangodb等數據庫。還支持Git,Yarn,Composer,終端等等,可以說安裝了laragon,開發所需要的各種軟件就都安裝好了,真正的開箱即用。
Laragon 特性
自動創建虛擬主機(Virtual Host,Valet 也有這樣的功能)基于自己的需求為不同的環境設置不同的配置郵件接收和發送輕松創建框架應用,如 Laravel、Symfony、WordPress、Joomla 等非常方便地切換 PHP、Apache、MySQL 的不同版本Laragon 安裝
laragon官網地址:請自行搜索吧,自媒體中不讓發網址鏈接(尷尬)。
目前的版本是4.0.14,php版本默認是7.2.11,安裝完畢出現如下界面:
laragon啟動界面點擊啟動所有開始使用,以下是我所用環境的啟動界面:
laragon啟動后的界面安裝完畢即可投入使用,詳細的使用介紹就不多贅述,試試鼠標右鍵點擊界面,自行體會發現的樂趣。
我后續會繼續發一些關于laragon的詳細使用教程,歡迎關注。
前言
實驗室的孫同學,希望自己的畢業作品是一套“通用的企業后臺管理系統”,因為他經常要給客戶做網站,希望能有一套工具來快速生成。
今天,就和大家分享一下我對此類系統的分析和理解,并作為最近一階段實驗室的《獨立開發實戰項目》
此類系統的難度是什么?
自行車的結構很簡單,折疊自行車也僅僅是增加了一點復雜度。但是,如果客戶要求 “折疊后的自行車要裝進雙肩包”,你怎么辦?
所以,最大的難度是:靈活、靈活、靈活;如何靈活滿足各種客戶的需求,是不變的追求。
什么是,通用的企業后臺管理系統
很多網站的主要功能都差不多,比如:用戶、新聞、產品這些,不同的網站主要是設計區別,以及少量的功能差別,尤其是對企業網站來說。
為了降低開發成本,就可以開發一套相對通用的管理系統,快速生成,也就是《內容管理系統》
什么是,內容管理系統
英文縮寫:CMS,其功能可謂萬金油。只要是 “內容” 都歸它管。這些都是內容:會員、新聞、文章、日志、商品等等,所以可大可小。
大到門戶網站的新聞系統(比如news.163.com),小到個人博客,都是內容管理系統。
有哪些,開源的內容管理系統
開源 = 免費下載源代碼
十幾年前我用過 ecms、dedecms假設網站,最高日IP近10萬,說起來還有點小驕傲呢。后來在CMS爆發期,各種各樣的管理系統蜂擁而出,不過我已經不怎么用此類產品了。
厲害一點的像wordpress、Joomla、Drupal等,厲害到什么程度呢? 雖然 wordpress 是免費的,但是有些公司為它們開發插件、設計模板,能有千萬級美金的收益。
內容管理系統,有什么特點
后臺強大以 ecms 做例子,它的后臺大約是這樣的。
有些企業網站,做出來的網站可能是這樣的(僅僅是舉例,也有很多用來制作大型網站)
配置多樣因為功能太多,所以需要配置大量的開關,來進行取舍。所以,越強大的CMS開關越多,專業的CMS是需要專門培訓的(就好像你學 office 軟件一樣)
插件開發再好的系統也不可能兼容所有需求,尤其是內容本身的涵蓋就很廣。所以,好的CMS必須留有“插件”機制,允許開發人員,針對特性需求進行二次開發。就好像U盤一樣,即插即用,隨時可拓展功能。
這方面,可以參考 wordpress,這是它的插件庫:https://wordpress.org/plugins/,目前有 55439 個插件,沒有做不到只有想不到。
模板管理因為一套CMS要勝任不同的前臺需求,加之后臺功能豐富無比,所以一套好的模板引擎必不可少,尤其是自定義的模板標簽,這樣才能實現千變萬化的數據調用。
當然,不要一口吃個胖子
作為實驗室的萌新,想一下完成這樣的內容管理系統,過于苛刻了。我們可以分成多個版本來實現。
基本功能管理員模塊配置模塊用戶模塊內容模塊
這是最基礎的,有了這幾個模塊,就可以實現一些基本需求了,至少做個價值千元的企業網站不成問題。
插件機制因為需求千變萬化,所以應盡快完成“插件”功能,將一些非核心功能以插件的形式加載,避免對系統核心造成負面影響。
模板機制為了實現數據的靈活調用,提供一些模板標簽吧。
不斷迭代一個系統,永遠沒有完美的時候,如何保持輕盈又能靈活完成需求,是開發團隊需要不斷思考的。
總結
內容管理系統,作為一個“萬金油”,還蠻適合作為新人的入門之作的,從簡單到復雜。
ThinkPHP是為了簡化企業級應用開發和敏捷WEB應用開發而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。
一、安裝ThinkPHP5
安裝需求:PHP版本不得小于5.4;
1、從官網進行下載安裝
2、通過composer進行安裝
如果還未安裝composer,請先安裝composer并配置環境變量
運行如下命令,進行安裝:
composer create-project topthink/think=5.0.* tp5 --prefer-dist
3、通過git安裝
3.1、運行如下命令,安裝thinkphp的應用項目
git clone https://github.com/top-think/think tp5
安裝成功后的界面:如下圖所示
3.2、進入到剛才已下載的tp5目錄下,運行如下命令,安裝thinkphp的核心框架
git clone https://github.com/top-think/framework thinkphp
安裝成功后的界面:如下圖所示
安裝完成,驗證是否安裝成功,在瀏覽器中輸入:http://hostname/tp5/public/
如果瀏覽器顯示如下圖所示,則說明框架安裝成功。
二、目錄結構框架的目錄結構,如下圖所示:
application:應用目錄
index:模塊目錄
index/config.php:模塊配置文件
index/common.php:模塊公共函數文件
index/controller:控制器目錄
index/model:模型目錄
index/view:視圖目錄
config.php:應用配置文件
command.php:命令工具配置文件
common.php:應用公共函數文件
tags.php:應用行為擴展定義文件
extend:擴展類庫目錄
public:WEB 部署目錄(對外訪問目錄)
static:靜態資源存放目錄(css,js,image)
index.php:應用入口文件
.htaccess:用于apache重寫
router.php:快速測試文件
runtime:應用的運行時目錄
vendor:通過composer安裝的第三方類庫目錄
thinkphp:系統核心目錄
lang:系統語言包目錄
library:框架核心類庫目錄
tpl:系統模板目錄
base.php:基礎定義文件
route:路由配置目錄
三、ThinkPHP框架最基本的架構
thinkphp是基于MVC模式開發的,業務邏輯、數據、界面顯示分離,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。
1、入口文件
用戶發起的請求都會經過應用的入口文件,通常是 public/index.php文件。入口文件的內容如下:
在入口文件index.php中加載了基礎文件base.php文件,在base.php中干了這樣一些事情:
載入Loader類
注冊自動加載
注冊錯誤和異常處理機制
實現日志接口
注冊類庫別名
加載完基礎文件之后,最后在index.php中執行應用并響應。
2、應用
ThinkPHP的應用是一個管理系統架構及生命周期的對象,由系統創建完成,應用通常在入口文件中被調用和執行,每個應用都具有自己獨立的模塊、config配置文件以及common公共函數文件。
3、模塊
一個應用是可能是由多個模塊組成的,通俗的來說,這些模塊即為該應用目錄下面的一個個的子目錄,每個模塊都有自己獨立的MVC結構、config配置文件以及common公共函數文件。
注:模塊名稱請避免使用PHP保留關鍵字,否則會造成系統錯誤。
4、控制器
控制器主要負責接收發送過來的請求,并調用相關的模型業務邏輯的數據處理,并最終將用戶請求數據渲染到視圖頁面上。
5、模型
模型類通常完成實際的業務邏輯和數據封裝,并返回和格式無關的數據。在定義模型時,要注意和表名對應,因為框架中的模型會自動對應數據庫中的數據表。在ThinkPHP中模型類的命名規則是除去表前綴的數據表名稱,命名方式采用的駝峰命名法,而且模型的首字母要大寫。
6、視圖
視圖接收從控制器渲染過來的數據,將數據渲染的成用戶可見的頁面。
7、命名空間
命名空間是程序設計者命名的內存區域,程序設計者根據需指定一些有名字的空間域,把一些全局實體分別存放到各個命名空間中,從而與其他全局實體分隔開。
通俗的說,每個名字空間都是一個名字空間域,存放在名字空間域中的全局實體只在本空間域內有效。名字空間對全局實體加以域的限制,從而合理的解決命名沖突。
1.解壓客戶端放到一個目錄下,新建tnsnames.ora放到客戶端文件夾的子目錄下。
2.加入以下代碼:est_db是自己起的連接名字,IP替換為遠程oracle的IP,service_name放數據庫名字
3.開啟php的oci擴展或者pdo_oci擴展,連接測試。
php7因為沒有帶php_oci_11g的擴展,需要自己安裝獲取去下載對應版本的dll文件,放到php的ext目錄下,在php.ini中開啟擴展。
在開啟后可能會出現windows缺失oci.dll文件。
4.將上面客戶端里面的oci.dll文件拷貝到php的目錄下即可--》啟動php,查看PHPinfo里面應該會出現如下擴展:
5.測試嘗試連接數據庫代碼:
6.PDO方式會拋出如下的異常(SQLSTATE[]: pdo_oci_handle_factory: <<Unknown>> (ext\pdo_oci\oci_driver.c:642))
這時候如果把剛才拷貝到php目錄下的文件刪除的話,有些被用到肯定就不能刪,經過測試,只有下面這個文件和剛才的oci.dll文件不能刪除。
7.還有個特點就是很大,里面封裝了很多函數擴展什么的。
現在就大功告成了,在此測試一下上面的PHP代碼:
【IT科技之家-itkeji綜合 -文章版權聲明】
非特殊說明,本文版權歸 [ IT科技之家-itkeji綜合 -ITMFB] 所有,轉載請注明出處.
PHP一直被唱衰,特別是某一些培訓機構為了推python、java等語言的培訓,總是搞一些編程語言排行榜,誤導編程初學者,給初學者造成PHP不行了的印象。是否PHP真的在走下坡路?PHP語言到底市場份額占有多少?
不妨根據 W3Techs 提供的數據和報告,看看 PHP 最新的使用統計和市場定位情況。W3Techs 是國外一個專門調查 Web 技術的網站,提供有關 Web 各種技術的使用情況信息。
來源地址:https://w3techs.com/technologies/overview/programming_language
以上是W3Techs提供的2019年12月6號的統計數據。
是的,你沒有看錯!PHP在WEB網站服務器端使用的編程語言所占份額高達78.9%,穩居第一!將排在第二位的ASP.NET和第三位的JAVA遠遠甩在身后。
那有人又開始杠了,你只是統計的一個月的,不具有代表性,那我們再來看看最近一年的情況。
(WEB服務器端編程語言使用情況統計)
(折線圖形式)
上圖我們可以看到PHP語言在WEB服務器端語言中基本穩定保持在79%,ASP.NET有小幅度下滑,Java小幅上升。
總而言之:
PHP是世界上最好的語言,沒有之一!不是梗,也不是空穴來風。PHP是免費開源的、WEB開發全球使用最多、生態最好、維護成本也是最低的一種網站服務端開發語言,所以做網站編程開發首選肯定是PHP,PHP也是學習周期最短,入門最容易的一門編程語言,不像Java、Python、.NET等需要一定的學歷,另外也是最好找工作的一門語言。
我們再來看看有哪些知名的網站使用的是PHP語言。
全部使用PHP的網站
php中文網
Smzdm
Asus
Nba
Pulzo
Getpocket
部分使用 PHP 的熱門網站
Wikipedia
Vk
WordPress
Ettoday
Instructure
騰訊
新浪
百度貼吧
網易
360
寶寶樹
那我們學習PHP,要學習哪個版本呢?
我們來看下具體的統計:
從圖中可以看出,PHP 5 和 PHP 7 是目前的主流。尤其是 PHP 5,大有還能再戰幾年的勢頭,至于 PHP 4 和 3 可以說是已經被拋棄了。
從PHP7開始,性能更是質的提高!最新一個版本PHP7.4也在11月底公布了,具體可參考《PHP 7.4.0剛剛發布!一起看看有哪些新特性》。
PHP8也即將發布,每個新版本都朝著更好的PHP邁出了又一步,屆時php會走的更遠!
既然您已經習慣了在您的網站上使用HTML,現在是時候處理PHP了,如果您搜索百度就會發現PHP的中文解釋,其英文解釋如下:
這是一種可以用來增強HTML網站的編程語言。為什么使用PHP ?這里有一些很好的理由。
Now that you are comfortable using HTML on your website, it is time to tackle PHP, a programming language you can use to enhance your HTML website. Why use PHP? Here are some great reasons.
與HTML 關系友好 Friendly With HTML
任何已經擁有網站并且熟悉HTML的人都可以輕松地進入PHP。事實上,PHP和HTML在頁面中是可互換的。您可以將PHP放在HTML外部或內部。雖然PHP為您的站點添加了新特性,但基本外觀仍然是用HTML創建的。
Anyone who already has a website and is familiar with HTML can easily make the step to PHP. In fact, PHP and HTML are interchangeable within the page. You can put PHP outside the HTML or inside. While PHP adds new features to your site, the basic appearance is still all created with HTML. Read more about using PHP with HTML.
互動功能 Interactive Features
PHP允許您以HTML所不能的方式與訪問者交互。您可以使用它來設計簡單的電子郵件表單或精心設計的購物車,以保存過去的訂單并推薦類似的產品。它還可以提供交互式論壇和私有消息傳遞系統。
PHP allows you to interact with your visitors in ways HTML alone can't. You can use it to design simple email forms or elaborate shopping carts that save past orders and recommend similar products. It can also deliver interactive forums and private messaging systems.
容易學習 Easy to Learn
開始使用PHP要比您想象的容易得多。通過學習一些簡單的功能,你可以用你的網站做很多事情。一旦您了解了基本知識,就可以查看internet上大量可用的腳本,您只需稍微調整一下即可滿足您的需求。
PHP is a lot easier to get started with than you might think. By learning just a few simple functions, you are able to do a lot of things with your website. Once you know the basics, check out the wealth of scripts available on the internet that you only need to tweak slightly to fit your needs.
一流的在線文檔 Top-Notch Online Documentation
PHP文檔是web上最好的。易如反掌。每個函數和方法調用都有文檔記錄,其中大多數都有大量的示例 可供您學習,還有來自其他用戶的評論。
The PHP documentation is the best on the web. Hands down. Every function and method call is documented, and most have tons of examples you can study, along with comments from other users.
低成本和開源 Low Cost and Open Source
PHP在網上是完全免費的。它是全球公認的,所以你可以在所有的網站開發和設計任務中使用它。
PHP is available online absolutely free. It is accepted globally so you can use it on all website development and design tasks.
兼容的數據庫 Compatible With Databases
通過擴展或抽象層,PHP支持包括MySql在內的各種數據庫。
With an extension or abstraction layer, PHP supports a wide range of databases including MySql.
它只是工作 It Just Works
PHP比其他任何東西都更容易更快地解決問題。它是用戶友好的,跨平臺的,易于學習。你還需要多少理由在你的網站上嘗試PHP ? 開始學習PHP吧。
PHP solves problems easier and faster than almost anything else out there. It is user-friendly, cross-platform and easy to learn. How many more reasons do you need to try PHP on your website? Just start learning PHP.
好了,讀完此文,您有何感想?歡迎關注互動!
注明:圖片及英文均來源于網絡,若侵權請告知作者刪除!本百家號已進入受全網原創保護狀態!若您不信,仍堅持大膽搬運或抄襲本文,請附加本文作者及出處!謝謝!
Go 是一種功能強大的編程語言,具有獨特的功能組合。而 PHP 是在服務器端執行的腳本語言,與 C 語言類似,是常用的網站編程語言,同時適用于所有微服務、小型、中型乃至大型應用程序。對于開發者而言,兩者在使用過程中,有哪些不同的體驗?本文即將為大家揭曉。
作者 | Dan Gurgui
譯者 | 彎月,責編 | 屠敏
16歲的時候,我發現了PHP。這是我學習的第一門編程語言。當時,我利用PHP來檢查用戶提交的表單并發送電子郵件,大多數表單都是“聯系我們”。多年以來,我始終將PHP作為我的強項,且堅持不懈地發展壯大自己的PHP知識和技能。雖然我覺得自己算不上PHP高手,但這是我最了解的編程語言。以前,我曾有機會在小型項目中使用Ruby、Java、Python和NodeJS。我通過這些經驗比較PHP和其他編程語言,了解如何更好地利用PHP的優點并克服它的缺點。
6個月前,我成為了 MessageBird 的一名工程師。申請工作的時候,我填寫了PHP,但是我沒想到入職后我就開始使用 GoLang,而且與PHP漸行漸遠。這種一次很好的經歷,在這段時間里,我學習了一種新的編程語言,而如今我又回到了PHP,同時我還擁有6個月的Go編程經驗。
Go是一種功能強大的編程語言,具有獨特的功能組合。我很遺憾沒能更深入地學習Go。我返回PHP的原因與編程語言本身無關,但是,我想總結一下這6個月的經驗,并比較一下這兩種語言。
靜態與動態
GoLang是一種靜態編程語言,不像PHP那樣是動態的。因此,你需要在初始化變量和對象時提前想清楚。在PHP中,你永遠不會初始化變量,需要時當場使用就可以了。因此,在聲明一個新變量之前,對于GoLang而言你需要三思而后行,我發現這比在PHP中檢查變量的做法更有效率。PHP 7添加了類型聲明,這是一個更好的實踐,但是在編寫代碼之前三思而后行是一種更健康的做法。
子程序與并行處理
GoLang 非常神奇的功能之一就是goroutine。這個功能支持異步運行功能。PHP中沒有任何功能與Goroutines的簡單性和易用性相提并論。每當需要在PHP中進行并行處理時,你都需要添加外部的排隊機制(Beanstalk、RabbitMQ等)。這會加劇基礎架構的復雜性,并增加項目的復雜性。
GoLang的并行處理遠遠超越了PHP。
面向對象功能
自從編程問世以來,面向對象的概念一直擁有一席之地。90年代,面向對象在C++中得到了廣泛應用,也因此成為了主流范式。面向對象最吸引我的地方在于,它允許工程師使用代碼創建業務邏輯圖,事實證明,當不斷發展的系統發生變化時,這種做法提供的價值無可限量。PHP和GoLang都提供面向對象的功能,但是,這兩種語言之間存在很大差異。
我花了很長時間才習慣了隱式接口。在GoLang中,在實現所有方法后,類型就會滿足接口要求。但在PHP中,你需要顯式地定義類型所需的接口,然后開始實現。有了Go的這一功能,你不需要提前思考應用程序的接口,這一點與我對靜態類型語言的認知正好相反。
不斷發展的模型具有復雜的需求,而領域驅動的設計可以滿足這種需求。為此,你需要許多面向對象的功能,PHP也的確提供了許多這樣的功能:trait、抽象方法和類,final方法和類,魔術方法等等。GoLang缺少這些功能,這是一個難以克服的限制條件。因此,我認為GoLang僅適用于微服務或小型應用程序,而PHP適用于所有微服務、小型、中型乃至大型應用程序。
測試
我認為,在決定項目質量方面,測試是最重要的工作:單元測試、集成測試、功能測試、UI測試、性能測試等等,項目擁有的測試越多,交付的質量就越好。GO和PHP的單元測試框架都很出色,Go擁有嵌入式測試包,而PHP有 PHPUnit,它們都提供了一組豐富的功能,可用于測試你的代碼。PHPUnit的功能比GoLang測試包更多,因為PHP的功能更多。這兩種工具都可以完成編程語言的工作。然而, 在進行高級測試時,PHP和Go就會表現出很大的不同。
首先,對于性能測試,Go的測試包中擁有很多性能測試的功能。pprof 等許多庫都可以使用這些功能來創建華麗的數據報告。雖然PHP也有一套可用于性能測試的庫和技術,但Go的更加易于使用。我相信這是靜態類型語言的優勢之一。
其次,對于高級測試技術(例如BDD、TDD和A/B測試),PHP擁有更多支持、更多庫,還有一個更大的社區。例如,兩種語言都實現了Cucumber(或Gherkin),但是PHP 的 BEHAT 實現支持40多種語言,是完全基于獨立組件構建的,而且在GitHub上的支持比Cucumber更多(更多分支、更多給星等等)。
最后,對于功能測試或UI測試,PHP的庫更多,且對現有工具的支持更好。Selenium 擁有非常強大的PHP支持(3000多個跨瀏覽器測試、視頻記錄、文本和可視日志等),而對于Go來說,只有一個沒有良好維護的驅動程序 tebeka / selenium(最后一次提交發生在5個月前)。
其他差異
兩種語言之間還有許多其他差異,重點包括:
GoLang 的性能比PHP更好。我們有數百種基準,可以在各種情況下測試 PHP 和 GoLang,但大多數時候明顯都是 GoLang 勝出。最重要的是,Go的開發速度很快:測試運行速度更快、內存使用效率更高、CPU使用率更低。PHP社區的人數遠遠超過了 GoLang,而且支持非常出色。我發現 GoLang 使用了許多糟糕的東西,例如代碼生成器,這都是PHP社區幾年前拋棄的東西。打包維護也很不相同。在GoLang中,打包維護是內部管理的;而PHP有兩層不同的實現方式:第一,PHP擴展級別;第二,每個人都使用的庫級別。PHP的情況更為復雜,而go則將兩層管理放到了一起。
最后一點想法
這兩種語言有明顯的區別,在兩者之間做選擇非常容易。GoLang 的性能更好,擁有原生異步功能以及其他基本功能,非常適合需要頻繁使用的小型應用程序和微服務。
然而,隨著應用程序的不斷增長,業務邏輯復雜度加劇的情況下,PHP是很自然的選擇,因為你可以充分利用PHP的面向對象功能和社區支持。
原文:https://medium.com/swlh/6-months-with-golang-after-many-years-with-php-c52124fb7da?
本文為 CSDN 翻譯,轉載請注明來源出處。
【End】
昨天(14號),根據Sam Soltano發布有關PHP網站有關PHP版本數據顯示,PHP網站中有50%使用php7版本以上,距離其PHP7最初發布已經過去4年時間了。
PHP7的發布使得php網站運行性能提升一倍左右,PHP作為web開發最熱門編程語言,一直從專注前端用戶的體驗效果。我們都應該知道PHP5是PHP發展歷史上性能與功能上的一次重要改革,但是隨意web開發的更高需要,大型PHP開發項目PHP5表現比較吃力,自從PHP7發布之后,web開發將要打破一切。
從官方說法,性能提升:PHP7比PHP5.6性能提升了兩倍,而且全面支持64位,更重要是修改了之前發現的致命錯誤,支持更多的類擴展,滿意開發的需要,所以PHP7的發布將是未來里程碑的發展。
目前新PHP網站已經不再把PHP5版本作為首先開發版本,默認開發版本頁是推薦PHP7以上版本,而且有更多的舊網站已經升級到PHP7以上。
雖然PHP7已經發布有四年之久,但是并沒有在更短時間內能超過PHP5版本,主要原因是PHP5版本系列已經發布許久,而且是當時最優秀的版本,從PHP6發布開始,PHP5并沒有被直接淘汰,PHP6出來之后PHP5.7更加受到開發者珍惜,PHP5.7系列的有PHP所有完整功能,所以PHP7從性能上彌補PHP5的不足。
所以未來PHP7版本將是PHP又一次重要的改革,我相信未來很長一段時間很難改變PHP7的地位。