2013-04-27 96 views
6

我想了解的3個簡單的PHP代碼行組合, 這是代碼:腓404未找到部首

ob_end_clean(); 
header('HTTP/1.0 404 Not Found'); 
exit; 

所以這是代碼和我的理解,第一線ob_end_clean( );,可以幫助例如BOM(字節順序標記),所以第一行是防止任何以前的輸出。

第二行header('HTTP/1.0 404 Not Found');是標題。

而第三行退出終止腳本執行。

如果我刪除第一行,並且在文檔空白頁(No 404)上獲得了BOM

如果我刪除了第三行(有和沒有BOM),我得到的頁面我想沒有空白頁,並沒有404

  • Mabye如果有人能解釋我爲什麼要使用退出的 404頭之後
  • 也就是爲什麼在BOM我不明白「標題已經發出錯誤」

謝謝大家,祝你有美好的一天。

+0

可能的重複[爲什麼我的PHP應用程序不會發送404錯誤?](http://stackoverflow.com/questions/437256/why-wont-my-php-app-send-a-404-error ) – Arend 2014-04-02 13:35:40

回答

10

如果我刪除了第一行,並在文檔中獲得了BOM,我得到空白 (No 404)。 你空白404是因爲你沒有在那裏定義的內容...

header('HTTP/1.0 404 Not Found'); 

,如果你想顯示一些404通知只發出通知該用戶是404錯誤頁面的網站... 用戶可以通過加載你的404.html文件做到這一點

if(strstr($_SERVER['REQUEST_URI'],'index.php')){ 
    header('HTTP/1.0 404 Not Found'); 
    readfile('404missing.html'); 
    exit(); 
} 

或直接

if (strstr($_SERVER['REQUEST_URI'],'index.php')){ 
    header('HTTP/1.0 404 Not Found'); 
    echo "<h1>Error 404 Not Found</h1>"; 
    echo "The page that you have requested could not be found."; 
    exit(); 
} 

exit函數是有,因爲你必須要防止的另一個PHP代碼的執行,這可能是後直接if或可後來excecuted,簡單地把它說END

+0

嘿盧卡斯,因爲我明白你的if語句僅用於索引頁面上的代碼工作。 – 2013-04-27 16:44:01

+0

不,它是404頁面的apache定義...我不知道你的代碼是什麼情況,你只能使用'IF'語句的內容。注意:header是'robots','crawlers'的消息,echo是'人類'的消息... – 2013-04-27 17:03:05

+0

謝謝你的回答Lukas,你能告訴我爲什麼瀏覽器解析並顯示404只有當我殺了腳本的其餘部分? – 2013-04-27 17:10:33

1

我爲什麼要使用出口處404頭

因此不會執行進一步的代碼。如果沒有的話,很好,在這種情況下沒有必要。雖然這是一個很好的習慣。

也就是爲什麼在BOM我不明白

「已經發出錯誤頭」你沒有配置PHP安裝來顯示錯誤,並通知到最終用戶。

+0

感謝您的回答,關於404頭如果您可以請告訴我爲什麼只有當我用其他(退出)代碼將其餘的代碼關閉時,爲什麼只有這樣我才能得到404服務器返回到瀏覽器的內容。關於「標題已發送」,你是對的。 – 2013-04-27 16:35:15

+0

我不明白爲什麼瀏覽器只有在退出腳本時纔會讀取404頭。 – 2013-04-27 16:52:21