網站執行PHP出現No input file specified 的解決辦法

天府雲創發表於2017-08-13

今天接到小夥伴的配置伺服器執行php頁面的時候就會報錯“No input file specified”。使用的是IIS + Fastcgi + PHP 5.3.X,在預設網站下執行都是正常的,但是新增一臺虛擬主機或網站按照網上的各種解決方法,如遮蔽doc_root、給目錄加許可權、修改緩衝池等等都無效。

終極解決方法【僅供參考,每個環境不一樣】

1
2
3
4
5
6
7
8
9
10
11
12
開啟php.ini檔案,這個你看你怎麼配置的了。
 
在php.ini檔案裡面修改:
 
1、增加一行(這個最重要)
 
fastcgi.impersonate = 1
 
2、修改兩項(解開註釋就可以了)
 
cgi.fix_pathinfo=1
cgi.force_redirect = 0

網上教程說的修改doc_root為空值或者註釋的方法都毫無作用,最直接的辦法就是回收應用程式池或者放大招重啟IIS.

設定IIS下PHP環境的DOCUMENT_ROOT【從源頭找分析】

在WINDOWS下的PHP總會出現DOCUMENT_ROOT為空,無值的問題.

設定IIS下PHP環境的DOCUMENT_ROOT

這兩天把一網站架到了IIS伺服器上,卻發現在讀取 $_SERVER['DOCUMENT_ROOT'] 的時候是空值。翻閱了PHP的文件,發現對該變數的解釋為:“當前執行指令碼所在的文件根目錄。在伺服器配置檔案中定義。”這才突然想到,Apache的配置檔案裡確實有 DocumentRoot 這一項,而IIS則沒有這個配置檔案。好吧,既然沒有,那就值得用別的方式來“修復”IIS伺服器了。把下面這段程式碼加到程式中,注意必須在你呼叫 $_SERVER['DOCUMENT_ROOT'] 之前哦!

  1. if(empty($_SERVER['DOCUMENT_ROOT']) && !empty($_SERVER['SCRIPT_FILENAME'])) {
  2.     $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0 - strlen($_SERVER['PHP_SELF'])));
  3. }
  4. if(empty($_SERVER['DOCUMENT_ROOT']) && !empty($_SERVER['PATH_TRANSLATED'])) {
  5.     $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0 - strlen($_SERVER['PHP_SELF'])));
  6. }

解決方法二:

使用 php.iis.net 上的安裝方法直接安裝 php 會出現$_SERVER["DOCUMENT_ROOT"]為空的問題。

解決辦法:將*.php對映到 C:\WINDOWS\system32\inetsrv\fcgiext.dll 即解決。

另外注意檢查下網站目錄是否有相關使用者的寫入許可權!!!
【其他】Apache、Ngnix處理辦法詳見:http://www.sudu.cn/service/detail/1/2/2/5/12253.html

相關文章