PHP版本如何選擇?應(yīng)該使用哪個(gè)版本?
超過75%的網(wǎng)站使用了PHP作為開發(fā)語言,wordpress,phpmyadmin和其他一些開源項(xiàng)目的盛行,帶來了一大批的長尾用戶。然而,他們一般安裝之后卻很少升級。下圖是目前PHP的使用統(tǒng)計(jì)。
驚人的是,此圖的左半部分表示已經(jīng)不被支持的PHP版本。PHP 5.2早在2011年1月已經(jīng)不再維護(hù)。這并不意味著你就不能使用它,但是這意味著某些安全更新,你就無法跟進(jìn)了。一些發(fā)行版將嘗試修復(fù)一些BUG,但你的PHP版本似乎有點(diǎn)乏善可陳,因?yàn)?,你正在使用的?006年的過時(shí)技術(shù)。
該從哪里開始
已經(jīng)沒有人選擇PHP 5.2版本了,但這些事情已經(jīng)發(fā)生了,但我不是說我寫這篇博客來吐槽什么,更不是說給你一些升級的指南。通常他們使用的都是一些2006開始的主機(jī)空間,他們有一個(gè)“長期支持”的版本,來避免使用更新的版本,或者他們目前還沒有升級的打算。又或者,理由真的很多。然而,好東西在新版的PHP等著您。
PHP 5.3 加入了很多有用的OOP特性!例如:匿名函數(shù),SPL擴(kuò)展不僅僅是迭代器,神話般的DateTime擴(kuò)展都已經(jīng)集成在PHP 5.3里面。還加入極其重要的E_DEPRECATED的錯(cuò)誤報(bào)告標(biāo)志。它會提醒您現(xiàn)在用的那些特性,將在下一版本無法使用。如果您已經(jīng)在使用PHP 5.3,那么您往后的升級道路將會更加順暢。如果您有線上程序運(yùn)行在低版本,我不建議您升級。
PHP 5.4則進(jìn)行了一系列的優(yōu)化,它具有更快的執(zhí)行效率和更少的內(nèi)存占用。以下是基準(zhǔn)測試的結(jié)果。
不管你使用使用到traits特性,PHP 5.4提高了程序性能,并降低了硬件成本。所以,我建議您使用開源軟件的時(shí)候要保持升級。
PHP 5.5 還在測試當(dāng)中,不適用于生產(chǎn)環(huán)境。自PHP 5.3之后,升級的風(fēng)險(xiǎn)和改動都會大大降低。
下面是麥子同學(xué)整理的文章
大家在選擇PHP版本時(shí)一定很困惑,有這么多版本究竟選那個(gè)呢?
問題:
我們現(xiàn)在新買了個(gè)服務(wù)器,用的是windows server 2008 r2。配置php 5.4的環(huán)境。
但我們之前開發(fā)的用2003,php是用5.2版本的,移植到新服務(wù)器,程序運(yùn)行會有影響嗎?或者我還需要注意那些問題?
API版本
PHP采用大版本向下兼容的升級方式,也就是說5.5兼容5.1-5.4,話雖如此,實(shí)際上兼容性并不樂觀,大家也不要指望PHP官方會給出什么好的解決辦法?,F(xiàn)在2013年9月,版本有5.2.17 5.3.27 5.4.17 5.5.3
5.2.17
這一版本可以說是支持最廣泛的版本了,現(xiàn)在還有絕大部分開源軟件使用該版本,例如Drupal7.23,Joomla2.5,國內(nèi)絕大多數(shù)軟件:dedecms5.7,discuzX3等等最新版還在支持5.2,如果沒特別要求,安裝這一版本是最省心省力的,但長遠(yuǎn)來看可能終要被拋棄。現(xiàn)在許許多多的主機(jī)商為了省人力成本也懶得去升級PHP版本,反正基本上都支持。(這里插一句,現(xiàn)在國內(nèi)軟件為了兼容更多的安裝環(huán)境,可謂用心良苦,甚至PHP5.1也能支持( discuzX3 不支持),最難得的是性能竟然也沒落后多少,能做到如些極致真心不容易?。〥rupal6建議使用該版本。
5.3.28(推薦)
這個(gè)版本雖然名稱上是5開頭,但很多人認(rèn)為是PHP6.0版本的開始,性能有所提升,而且因?yàn)樵S多API都發(fā)生了變化,對5.2的兼容不太好,雖然有一部分開源軟件聲稱能兼容5.2-5.3,但問題好像也不少,許多索性就放棄5.2了,例如Joomla3只支持5.3以上。而對于Drupal7強(qiáng)烈建議使用該版本,支持相當(dāng)好。而對于Drupal8也可以使用該版本,支持也相當(dāng)不錯(cuò)。該版本使用范圍非常廣,在兼顧性能和兼容性之間做出一個(gè)不錯(cuò)的平衡點(diǎn)。
5.4(輕輕推薦)
5.4基本上已經(jīng)接近完整體了,現(xiàn)時(shí)比較完善,穩(wěn)定性和性能也不錯(cuò),未來升級的重點(diǎn)版本,Drupal7.X對其支持尚可,但第三方模塊還不太完美。如果懶得以后升級,可以一步到位安裝該版本。
5.5
從5.3開始,以后版本基本上都是主打性能上的提升,函數(shù)什么的都能向后兼容。5.5開始好像有了64位版本,性能更加強(qiáng)勁,我沒試過,不敢發(fā)表言論。
總結(jié)
如果開源軟件說建議安裝PHP5.3,那你就老老實(shí)實(shí)用5.3,別用5.5什么的,你可能認(rèn)為反正都能兼容,性能可能更好,為什么不用新的呢?話是這么說,但你知道開源軟件在開發(fā)的時(shí)候一般都是在特定的環(huán)境開發(fā),就算兼容再好也會有想不到的意外(再強(qiáng)大的隊(duì)伍也不可能對所有函數(shù)API進(jìn)行兼容測試,那是相當(dāng)可怕的工作量?。?,它只會在特定的環(huán)境下進(jìn)行測試和優(yōu)化,而且就算知道兼容有問題,團(tuán)隊(duì)也不會去為了兼容更高版本去修改,不是他們死板,而是為了安全和穩(wěn)定來考慮的。在開源氛圍下,我們應(yīng)該有個(gè)意識就是“夠用就是最好”,而不是“最新是最好”。舉個(gè)列子,Joomla3.1在5.4-5.5都運(yùn)行不良,甚至安裝不能成功。但Drupal卻在5.5.3下也運(yùn)行正常(本機(jī)),我想是個(gè)別案例吧?但好像運(yùn)行中出現(xiàn)過意料之外的錯(cuò)誤,不知道是不是版本的問題,希望不是。
None-thread-safe or thread-safe
Apache 一般選 none-thread-safe,IIS選后者(FAST-CGI),我就不解釋了,信哥就沒錯(cuò)。
TS指Thread Safety,即線程安全,一般在IIS以ISAPI方式加載的時(shí)候選擇這個(gè)版本。
NTS即None-Thread Safe,一般以fast cgi方式運(yùn)行的時(shí)候選擇這個(gè)版本,具有更好的性能。
從2000年10月20日發(fā)布的第一個(gè)Windows版的PHP3.0.17開始的都是線程安全的版本,這是由于與Linux/Unix系統(tǒng)是采用多進(jìn)程的工作方式不同的是Windows系統(tǒng)是采用多線程的工作方式。如果在IIS下以CGI方式運(yùn)行PHP會非常慢,這是由于CGI模式是建立在多進(jìn)程的基礎(chǔ)之上的,而非多線程。一般我們會把PHP配置成以ISAPI的方式來運(yùn)行,ISAPI是多線程的方式,這樣就快多了。但存在一個(gè)問題,很多常用的PHP擴(kuò)展是以Linux/Unix的多進(jìn)程思想來開發(fā)的,這些擴(kuò)展在ISAPI的方式運(yùn)行時(shí)就會出錯(cuò)搞垮IIS。因此在IIS下CGI模式才是 PHP 運(yùn)行的最安全方式,但CGI模式對于每個(gè)HTTP請求都需要重新加載和卸載整個(gè)PHP環(huán)境,其消耗是巨大的。
為了兼顧IIS下PHP的效率和安全,微軟給出了FastCGI的解決方案。FastCGI可以讓PHP的進(jìn)程重復(fù)利用而不是每一個(gè)新的請求就重開一個(gè)進(jìn)程。同時(shí)FastCGI也可以允許幾個(gè)進(jìn)程同時(shí)執(zhí)行。這樣既解決了CGI進(jìn)程模式消耗太大的問題,又利用上了CGI進(jìn)程模式不存在線程安全問題的優(yōu)勢。
因此,如果是使用ISAPI的方式來運(yùn)行PHP就必須用Thread Safe(線程安全)的版本;而用FastCGI模式運(yùn)行PHP的話就沒有必要用線程安全檢查了,用None Thread Safe(NTS,非線程安全)的版本能夠更好的提高效率。
64位和32位
你的系統(tǒng)是64位就選64位,是32位就選32位,不解釋,信哥。
未來
說實(shí)話,未來是屬于那些使用PHP5.4及以上的人。保持升級,定期跟蹤語言的新特性和進(jìn)展是我們?nèi)粘9ぷ鞯囊徊糠帧H绻呀?jīng)落后了,那么我強(qiáng)烈建議您開始做升級計(jì)劃,升級到一個(gè)比較新的版本。努力是值得的,畢竟程序是長年累月運(yùn)行的。
相關(guān)文章
學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)訪問者模式(Visitor)
這篇文章主要介紹了php設(shè)計(jì)模式中的訪問者模式,使用php實(shí)現(xiàn)訪問者模式,感興趣的小伙伴們可以參考一下2015-12-12PHP使用PDO調(diào)用mssql存儲過程的方法示例
這篇文章主要介紹了PHP使用PDO調(diào)用mssql存儲過程的方法,結(jié)合簡單實(shí)例形式分析了php基于pdo簡單實(shí)現(xiàn)連接及調(diào)用存儲過程相關(guān)操作技巧,需要的朋友可以參考下2017-10-10PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹操作示例
這篇文章主要介紹了PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹操作,結(jié)合實(shí)例形式分析了php采用非遞歸算法對二叉樹進(jìn)行先序、中序及后序遍歷操作的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01PHP實(shí)現(xiàn)動態(tài)柱狀圖改進(jìn)版
這篇文章主要介紹了PHP實(shí)現(xiàn)動態(tài)柱狀圖改進(jìn)版,是在前面所述實(shí)現(xiàn)柱狀圖的基礎(chǔ)上進(jìn)行的改進(jìn),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03php不使用copy()函數(shù)復(fù)制文件的方法
這篇文章主要介紹了php不使用copy()函數(shù)復(fù)制文件的方法,涉及php讀寫文件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03PHP實(shí)現(xiàn)批量重命名某個(gè)文件夾下所有文件的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)批量重命名某個(gè)文件夾下所有文件的方法,涉及php針對文件夾下文件的遍歷、字符串查找、截取及rename函數(shù)重命名文件等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09php數(shù)組函數(shù)序列之a(chǎn)rray_flip() 將數(shù)組鍵名與值對調(diào)
array_flip() 函數(shù)將使數(shù)組的鍵名與其相應(yīng)值調(diào)換,即鍵名變成了值,而值變成了鍵名2011-11-11