2014-04-02 56 views
0

我試圖阻止直接訪問下面的文件(並且只允許訪問提交表單的人),但是當我正確地轉到此文件時,而不是404我正確地看到該文件。有人能說出這段代碼有什麼問題嗎?PHP標題不工作 - 頁面像往常一樣顯示

<?php 
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') { 
    header("HTTP/1.0 404 Not Found"); 
    } else { 
    if(isset($_POST['a'])){ 
     switch ($_POST['a']){ 
     case "1": 
      $var = "hey"; 
      break; 
     case "2": 
      $var = "now"; 
      break; 
     default: 
      $var = "other"; 
     } 
    } 
    } 
?> 
<!doctype html> 
<html> 
    <head> 
    <title>test</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    </head> 
    <body> 
    something 
    </body> 
</html> 
+0

'exit'後設置標題 –

+0

您仍然發送HTML。 –

+0

我是否也應該在該線程中添加'ob_end_clean();'? – rockyraw

回答

1

你需要記住停止執行你叫404後:

header("HTTP/1.0 404 Not Found"); 
exit(); // Stop Executing 

如果你不你會發送404狀態代碼這個HTML,並且大多數瀏覽器在這種情況下仍然會顯示HTML。 X

顯示錯誤頁面

犯錯誤屏幕並把它放在一個文件名爲類似,404.php,然後將代碼更新到:

header("HTTP/1.0 404 Not Found"); 
include '404.php'; // Display the Not Found error 
exit();   // Stop Executing 
+0

我已經添加了,現在我得到一個空白頁,爲什麼我沒有得到錯誤頁面? – rockyraw

+0

Internet Explorer顯示404的自定義錯誤頁面沒有內容(稱爲「友好的錯誤消息」),但大多數其他瀏覽器將顯示他們想要的,即空白屏幕。如果你想創建自己的錯誤頁面,我建議創建一個,將其放在一個名爲404.php的文件中,然後添加'include'404.php';'。我會編輯我的答案來反映這個:) x –

1

退出;在404頭後有

真正做到是沒有在開幕PHP標籤<面前PHP