一、對于php頁面完全無法訪問的情況
1、確認是php的問題還是iis等服務器的問題
判斷方法,在目錄下放一個靜態文件,通過瀏覽器判斷這個靜態文件可否訪問。若可以訪問,即為php問題。
如果是IIS的問題,常見的有兩種情況,一個判斷的利器是telnet。
linux的telnet其實更加好用,因為默認是打開回顯的。而windows,則需要用 set localecho,否則看不到輸入的文字
1.1 防火墻禁止80端口
進入telnet后,輸入指令,open 域名 80
如:open www.baidu.com 80
如果能連接上,會出現一個黑色屏幕,等待輸入
提示所謂的無法打開到主機的連接,在端口80失敗,則表示這個端口不可達。可能的原因有:DNS服務器沒有這個域名(用nslookup查),遠程主機沒有開啟或禁止連接(用ping等命令查),以及這里說的,防火墻沒有打開80端口。
1.2 服務器上目標目錄的權限設置不正確
這種情況下,一般會提示要求登錄的對話框,不至于顯示不出來頁面
1.3 其他問題
假設要訪問的主機是www.baidu.com ,那么,用如下命令查:
> telnet www.baidu.com 80
會出來一個黑屏幕,這個時候速度要快,因為服務器可能不會等你輸入,他期待的是一個迅速的輸入。(可以先在記事本里頭打好,然后粘貼進去),直接telnet可能沒有localecho,可能需要盲打
指令例子,括號內的字符不要輸入:
GET / HTTP/1.1 (回車)
Host: www.baidu.com (回車)
(回車)
注意,在host行后有兩個回車。
這個是用telnet模擬瀏覽器對目標主機的請求。如圖:
注意,回復頭的內容擁有非常豐富的信息,如200表示請求成功。500表示內部服務器錯誤等,具體信息可以看看相關文檔。
1.4 一點點背景知識
以上的步驟涉及到瀏覽器發起請求的過程,介紹下或許會有幫助:
1、 你在瀏覽器的地址欄輸入域名,并按下回車。
2、瀏覽器請求DNS服務器將域名轉換為IP地址——注意,這一步還和你的網頁服務器(IIS或者APACHE)沒有任何關系。
3、瀏覽器向你的網頁服務器請求連接——相當于我們telnet 80端口。當然, 如果你指定了端口號,他就會連接你指定的端口。但是默認端口是80,這個是rfc規定的http的端口,https端口是443,這個過程更加復雜,有密鑰交換和加解密的過程,因此沒辦法用這種方法做trouble shooting,建議在這個階段先搞定http的再說。
4、建立了一條連接,服務器等待瀏覽器發請求頭,瀏覽器發請求頭。請求頭以一個空行結束。
5、請求頭格式如下:
方法【空格】請求路徑(不包含域名,如/a.html或者/)【空格】協議
HOST:請求的域名
例如:
GET /index.php HTTP/1.1 (回車)
Host: www.baidu.com (回車)
(回車)
請求頭可能有其他信息,例如,提交的信息,不過對于我們而言,這個就夠了。
方法,常用的就是get和post,一般請求網頁用get,提交信息用post。
6、服務器處理并返回數據,包括頭和網頁體。
HTTP/1.1 200 OK
這行開頭,包括了協議,以及錯誤代碼(或成功代碼),錯誤代碼解釋。
對于瀏覽器而言,可能會有不少信息有用,但對于我們而言,知道代碼和錯誤代碼解釋就很有必要了。
信息體里頭,可能會有很多別的東西,例如對這個信息的詳細解釋等。php的錯誤報告開啟的時候,也會在這里頭報告相關問題。
2、確認php擴展加載。
2.1isapi擴展
對于isapi擴展,在主目錄的配置下:
找到php:
若沒有,添加之。
2.2對于fastcgi方法
另一種加載方法是fastcgi,這種方法需要判斷是fastcgi引擎問題還是php問題,判斷方法是跳過fastcgi,直接用cgi方式加載php.exe。