標籤:錯誤 解決方案 步驟 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