技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

win2012 IIS8.5 安裝PHP教程,一些版本不能用

作者:admin    時(shí)間:2022-11-23 10:46:28    瀏覽:

因?yàn)橐恢庇脀in2003+IIS6.0+PHP的環(huán)境,所以搭建PHP自認(rèn)為非常熟悉了,但是最近在搭建win2012+IIS8.5+PHP的環(huán)境時(shí),我遇到了一些問題,經(jīng)過4個(gè)小時(shí)的折騰,終于搞定了,本文記錄一些經(jīng)驗(yàn),可能不少朋友也會(huì)遇到與我相同的問題。

win2012安裝PHP,一些版本不能用

一開始我使用的PHP版本是 PHP-5.2.4-Win32,參照win10手動(dòng)安裝PHP的方法,很快就安裝完畢,并且測(cè)試PHP程序運(yùn)行成功,注意,此時(shí)沒有用到php.ini這個(gè)文件。但當(dāng)我要啟用某些擴(kuò)展功能時(shí),比如extension=php_curl.dll,要用到了php.ini,并把該文件復(fù)制到C:\Windows后,運(yùn)行PHP文件竟然報(bào)錯(cuò):500內(nèi)部服務(wù)器錯(cuò)誤。這讓我知道,以前win2003+IIS6.0+PHP的搭建方法,在win2012系統(tǒng)不適用了!

是不是PHP版本太低了?我?guī)е@個(gè)疑問,下載了 php-5.3.29-nts-Win32-VC9-x86,重新手動(dòng)配置PHP環(huán)境,沒用到php.ini時(shí),測(cè)試PHP程序運(yùn)行成功。之后啟用某擴(kuò)展功能,用到了php.ini,并把該文件復(fù)制到C:\Windows后,再次運(yùn)行PHP文件,不再報(bào)錯(cuò)!如此看來,真是PHP版本問題,要用 php5.3 以上的版本才行。

我還發(fā)現(xiàn),與win2003配置PHP環(huán)境不同,在win2012系統(tǒng)配置PHP,若使用curl擴(kuò)展(其他擴(kuò)展可能也一樣),則修改 php.ini ,修改完重啟IIS立即生效了,不用再把php.ini文件復(fù)制到 C:\WINDOWS\ ,也不要復(fù)制與擴(kuò)展相關(guān)的文件如 libeay32.dllssleay32.dllC:\WINDOWS\SysWOW64\。

注意問題

1、還須安裝VC庫組件

安裝配置好 php-5.3.29-nts-Win32-VC9-x86 后,還需要在服務(wù)器安裝VC9,VC9是指Microsoft Visual C++ 9.0 32位,是安裝 Visual C++庫的運(yùn)行時(shí)組件,使用戶能夠在計(jì)算機(jī)上運(yùn)行使用Visual C++開發(fā)的應(yīng)用程序,必須安裝了之后才能正常運(yùn)行。

如果你安裝的PHP是其他版本,如 php-7.4.33-nts-Win32-VC15-x86,那么配置后你還必須安裝VC15,PHP才能正常運(yùn)行。

總之是看PHP的文件名決定所須安裝的是哪個(gè)VC版本庫組件。

2、只能安裝非線程安全的版本

PHP版本有很多,如:

php-5.3.29-nts-win32-VC9-x86.msi
php-5.3.29-nts-Win32-VC9-x86.zip
php-5.3.29-src.zip
php-5.3.29-win32-VC9-x86.msi
php-5.3.29-Win32-VC9-x86.zip

在搭建win2012+IIS8.5+PHP環(huán)境時(shí),只能選擇非線程安全的版本,即是文件名含“nts”的版本。

.msi是安裝版,src.zip是源碼包。我們都不使用,其他2個(gè)版本的區(qū)別是:

php-5.3.29-nts-Win32-VC9-x86.zip ,nts為Non Thread Safe非線程安全的版本。

php-5.3.29-Win32-VC9-x86.zip,這個(gè)為線程安全的版本。

同時(shí)PHP還有其他的版本,即x64的版本,但是x64版本是實(shí)驗(yàn)性質(zhì)的,所以可以無視,直接使用x86版。

至于 Thead Safe(線程安全) 和 Non Thead Safe(非線程安全) ,由于IIS配置PHP時(shí),使用的是FastCGI模塊,而此模塊是單線程執(zhí)行的,因而不需要線程安全版本。

TS(線程安全)和NTS(非線程安全)之分

Windows版的PHP從版本5.2.1開始有Thread Safe(線程安全)和None Thread Safe(NTS,非線程安全)之分,這兩者不同在于何處?到底應(yīng)該用哪種?這里做一個(gè)簡單的介紹。

從2000年10月20日發(fā)布的第一個(gè)Windows版的PHP3.0.17開始的都是線程安全的版本,這是由于與Linux/Unix系統(tǒng)是采用多進(jìn)程的工作方式不同的是Windows系統(tǒng)是采用多線程的工作方式。如果在IIS下以CGI方式運(yùn)行PHP會(huì)非常慢,這是由于CGI模式是建立在多進(jìn)程的基礎(chǔ)之上的,而非多線程。

一般我們會(huì)把PHP配置成以ISAPI的方式來運(yùn)行,ISAPI是多線程的方式,這樣就快多了。但存在一個(gè)問題,很多常用的PHP擴(kuò)展是以Linux/Unix的多進(jìn)程思想來開發(fā)的,這些擴(kuò)展在ISAPI的方式運(yùn)行時(shí)就會(huì)出錯(cuò)搞垮IIS。因此在IIS下CGI模式才是PHP運(yùn)行的最安全方式,但CGI模式對(duì)于每個(gè)HTTP請(qǐng)求都需要重新加載和卸載整個(gè)PHP環(huán)境,其消耗是巨大的。

為了兼顧IIS下PHP的效率和安全,微軟給出了FastCGI的解決方案。FastCGI可以讓PHP的進(jìn)程重復(fù)利用而不是每一個(gè)新的請(qǐng)求就重開一個(gè)進(jìn)程。同時(shí)FastCGI也可以允許幾個(gè)進(jìn)程同時(shí)執(zhí)行。這樣既解決了CGI進(jìn)程模式消耗太大的問題,又利用上了CGI進(jìn)程模式不存在線程安全問題的優(yōu)勢(shì)。

因此,如果是使用ISAPI的方式來運(yùn)行PHP就必須用Thread Safe(線程安全)的版本;而用FastCGI模式運(yùn)行PHP的話就沒有必要用線程安全檢查了,用None Thread Safe(NTS,非線程安全)的版本能夠更好的提高效率。

PHP官方上關(guān)于widows的版本有4個(gè):VC9 x86 Non Thread Safe,VC9 x86 Thread Safe,VC6 x86 Non Thread Safe,VC6 x86 Thread Safe;那么有什么區(qū)別呢?

1、這是對(duì)windows系統(tǒng)中運(yùn)行庫依賴

PHP是用C語言開發(fā)的所以依賴VC庫運(yùn)行。

Visual C++ 2003 運(yùn)行庫(VC7)
Visual C++ 2005 運(yùn)行庫(VC8)
Visual C++ 2008 運(yùn)行庫(VC9)
Visual C++ 2010 運(yùn)行庫(VC10)
Visual C++ 2012 運(yùn)行庫(VC11)
Visual C++ 2013 運(yùn)行庫(VC12)

只有安裝了相應(yīng)的運(yùn)行庫才能運(yùn)行PHP,如php5.5要求VC11的安裝。

2、運(yùn)行方式的不同

PHP有2中運(yùn)行方式:ISAPI和FastCGI。

ISAPI執(zhí)行方式是以DLL動(dòng)態(tài)庫的形式使用,可以在被用戶請(qǐng)求后執(zhí)行,在處理完一個(gè)用戶請(qǐng)求后不會(huì)馬上消失,所以需要進(jìn)行線程安全檢查,這樣來提高程序的執(zhí)行效率,所以如果是以ISAPI來執(zhí)行PHP,建議選擇Thread Safe版本;

而FastCGI執(zhí)行方式是以單一線程來執(zhí)行操作,所以不需要進(jìn)行線程的安全檢查,除去線程安全檢查的防護(hù)反而可以提高執(zhí)行效率,所以,如果是以FastCGI來執(zhí)行PHP,建議選擇Non Thread Safe版本。

對(duì)于apache服務(wù)器來說一般選擇isapi方式,而對(duì)于nginx服務(wù)器則選擇FastCGI方式。

相關(guān)文章

標(biāo)簽: IIS8.5  IIS  PHP  
x