編輯整理:麥子
大家在選擇php版本時一定很困惑,有這么多版本究竟選那個呢?
問題:
我們現在新買了個服務器,用的是windows server 2008 r2。配置php 5.4的環境。
但我們之前開發的用2003,php是用5.2版本的,移植到新服務器,程序運行會有影響嗎?或者我還需要注意那些問題?
api版本
php采用大版本向下兼容的升級方式,也就是說5.5兼容5.1-5.4,話雖如此,實際上兼容性并不樂觀,大家也不要指望php官方會給出什么好的解決辦法。現在2013年9月,版本有5.2.17 5.3.27 5.4.17 5.5.3
5.2.17
這一版本可以說是支持最廣泛的版本了,現在還有絕大部分開源軟件使用該版本,例如drupal7.23,joomla2.5,國內絕大多數軟件:dedecms5.7,discuzx3等等最新版還在支持5.2,如果沒特別要求,安裝這一版本是最省心省力的,但長遠來看可能終要被拋棄?,F在許許多多的主機商為了省人力成本也懶得去升級php版本,反正基本上都支持。(這里插一句,現在國內軟件為了兼容更多的安裝環境,可謂用心良苦,甚至php5.1也能支持(discuzx3不支持),最難得的是性能竟然也沒落后多少,能做到如些極致真心不容易?。ヾrupal6建議使用該版本。
5.3.28(推薦)
這個版本雖然名稱上是5開頭,但很多人認為是php6.0版本的開始,性能有所提升,而且因為許多api都發生了變化,對5.2的兼容不太好,雖然有一部分開源軟件聲稱能兼容5.2-5.3,但問題好像也不少,許多索性就放棄5.2了,例如joomla3只支持5.3以上。而對于drupal7強烈建議使用該版本,支持相當好。而對于drupal8也可以使用該版本,支持也相當不錯。該版本使用范圍非常廣,在兼顧性能和兼容性之間做出一個不錯的平衡點。
5.4(輕輕推薦)
5.4基本上已經接近完整體了,現時比較完善,穩定性和性能也不錯,未來升級的重點版本,drupal7.x對其支持尚可,但第三方模塊還不太完美。如果懶得以后升級,可以一步到位安裝該版本。
5.5
從5.3開始,以后版本基本上都是主打性能上的提升,函數什么的都能向后兼容。5.5開始好像有了64位版本,性能更加強勁,我沒試過,不敢發表言論。
總結
如果開源軟件說建議安裝php5.3,那你就老老實實用5.3,別用5.5什么的,你可能認為反正都能兼容,性能可能更好,為什么不用新的呢?話是這么說,但你知道開源軟件在開發的時候一般都是在特定的環境開發,就算兼容再好也會有想不到的意外(再強大的隊伍也不可能對所有函數api進行兼容測試,那是相當可怕的工作量?。粫谔囟ǖ沫h境下進行測試和優化,而且就算知道兼容有問題,團隊也不會去為了兼容更高版本去修改,不是他們死板,而是為了安全和穩定來考慮的。在開源氛圍下,我們應該有個意識就是“夠用就是最好”,而不是“最新是最好”。舉個列子,joomla3.1在5.4-5.5都運行不良,甚至安裝不能成功。但drupal卻在5.5.3下也運行正常(本機),我想是個別案例吧?但好像運行中出現過意料之外的錯誤,不知道是不是版本的問題,希望不是。
none-thread-safe or thread-safe
apache 一般選 none-thread-safe,iis選后者(fast-cgi),我就不解釋了,信哥就沒錯。
服務器之家小編補充一下: 2003系統中,我們一般用isapi加載,如果是2008及以上系統用fast-cgi方式。
ts指thread safety,即線程安全,一般在iis以isapi方式加載的時候選擇這個版本。
nts即none-thread safe,一般以fast cgi方式運行的時候選擇這個版本,具有更好的性能。
從2000年10月20日發布的第一個windows版的php3.0.17開始的都是線程安全的版本,這是由于與linux/unix系統是采用多進程的工作方式不同的是windows系統是采用多線程的工作方式。如果在iis下以cgi方式運行php會非常慢,這是由于cgi模式是建立在多進程的基礎之上的,而非多線程。一般我們會把php配置成以isapi的方式來運行,isapi是多線程的方式,這樣就快多了。但存在一個問題,很多常用的php擴展是以linux/unix的多進程思想來開發的,這些擴展在isapi的方式運行時就會出錯搞垮iis。因此在iis下cgi模式才是 php運行的最安全方式,但cgi模式對于每個http請求都需要重新加載和卸載整個php環境,其消耗是巨大的。
為了兼顧iis下php的效率和安全,微軟給出了fastcgi的解決方案。fastcgi可以讓php的進程重復利用而不是每一個新的請求就重開一個進程。同時fastcgi也可以允許幾個進程同時執行。這樣既解決了cgi進程模式消耗太大的問題,又利用上了cgi進程模式不存在線程安全問題的優勢。
因此,如果是使用isapi的方式來運行php就必須用thread safe(線程安全)的版本;而用fastcgi模式運行php的話就沒有必要用線程安全檢查了,用none thread safe(nts,非線程安全)的版本能夠更好的提高效率。
64位和32位的選擇問題
你的系統是64位就選64位,是32位就選32位,不解釋,信哥。
服務器之家小編補充:很多情況下我們不能保證我們所有需要iis中加載的軟件都是64位的,有些軟件還必須用32格式兼容跑。
原文鏈接:http://cnmaizi.com/tech/php-version.html