Windows Server 2008 配置IIS+PHP

來源:互聯網
上載者:User

標籤:錯誤   解決方案   步驟   logs   mos   零配置   連結   令行   安全   

問題:

最近要上線一個PHP寫成的MVC項目,發現Windows Server 2008安裝的還是PHP5.2,很多文法不支援。

嘗試的一些解決方案:

1.將PHP升級為5.6,但是需要做好IIS和PHP的配置,因為IIS還承擔了其他幾個Web項目的運行,所以這個方案也是目前最穩妥的辦法。

2.在Windows Server 2008上安裝Apache或者Nginx,因為Apache或者Nginx和PHP搭配更佳,但是Apache在Windows Server 2008上表現不好,另外這個方案還有個缺點是另外需要配置子網域名稱等,之前沒有研究過這方面,所以這個方案備選。

最終解決方案:

1.在安裝PHP5.6之前,先檢查一下是否有Visual C++ 2012運行環境(發行包)。如果沒有,先在微軟下載中心下載安裝。

這裡提供下載連結:x86版本,x64版本

2.在PHP官網下載PHP5.6,解壓縮到任意盤符任意檔案夾,當然,如果你想在IIS配置上“偷個懶”的話,可以把原來PHP檔案夾改名為PHP5.2,把PHP5.6改為PHP,來替換原來的路徑。

接下來是一些較為複雜的步驟,請坐穩了,我們要加速了~

3.在php.ini中修改或確保要有以下配置:

cgi.force_redirect = 0

配置的注釋上寫:

cgi.force_redirect is necessary to provide security running PHP as a CGI under most web servers. Left undefined, PHP turns this on by default. You can turn it off here AT YOUR OWN RISK. You CAN safely turn this off for IIS, in fact, you MUST.

其實,本意是希望提供安全的CGI,但是IIS下,你還是必須把TA關了。

 

cgi.fix_pathinfo=1

配置的注釋上寫:

cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP‘s previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting of zero causes PHP to behave as before. Default is 1. You should fix your scripts to use SCRIPT_FILENAME rather than PATH_TRANSLATED.

這裡沒有IIS,所以設定為1即可。

 

fastcgi.impersonate = 1

配置的注釋上寫:

FastCGI under IIS (on WINNT based OS) supports the ability to impersonate security tokens of the calling client. This allows IIS to define the security context that the request runs under. mod_fastcgi under Apache does not currently support this feature (03/17/2002)

Set to 1 if running under IIS. Default is zero.

這裡很感動此處的注釋,把坑都說明清楚了,IIS下,讓你設定為1就應該設定為1。

 

date.timezone = Asia/Shanghai

時區設定為亞洲上海,但實際上這個配置似乎只作用於你用phpinfo()函數來查看PHP版本,真要用到時區在項目裡再寫一句聲明也可以,已親測。

4.在IIS中添加程式映射

 

 這一步其實不難理解,就是讓所有的PHP檔案都用CGI來執行,所以把php-cgi.exe這個可執行檔的路徑填寫進去就可以了。

原來在ISAPI限制和CGI限制裡有原來PHP5.2的條款,因為PHP5.2和PHP5.6不一樣,5.6版本已經沒有php5isapi.dll這個檔案了,也就是說5.6版本已經放棄dll而採用cgi可執行檔,所以可以把這條刪除或者設定為“不允許”。如果要填寫就填寫php-cgi.exe的路徑,記得加引號。

至此,已經可以在瀏覽器中看到這個熟悉的頁面了。

 總結:

其實,我們本來要放棄這個方案的,因為中午被一個500狀態代碼搞得焦頭爛額,不知道問題出在哪裡,後來又出現了php-cgi.exe - FastCGI 進程意外退出無法定位程式輸入焦點 php5ts.dll這樣的錯誤,後來我直接運行了php-cgi.exe,發現在命令列中出現的路徑並不是PHP5.6的檔案夾路徑,才發現問題。於是我直接把PHP5.6檔案夾命名為原來PHP檔案夾的名稱,問題順利解決。但問題是沒了,似乎還是遺留下來了一個疑點,究竟少了哪一步?以後如果IIS從零配置PHP,還是會遇到這個問題。

Windows Server 2008 配置IIS+PHP

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.