2016-05-14 78 views
-3

Fopen的作品,我可以閱讀文件和東西,但是當我指定一個無效的,我希望它返回一個404頭,但它不能正常工作。如果fopen不存在,它不會將標題更改爲404?

$handle = fopen($filepath, "rb"); 

if (!$handle) { 
    header("HTTP/1.0 404 Not Found"); 
    exit; 
} 

在我讀過的大約5篇文章中,這些是例子,它們看起來和我一樣。

+1

看到[這裏](http://php.net/manual/en/function.http-response-code.php)如何做到這一點 –

+0

我認爲我們缺少一些代碼會重現問題 –

回答

-1

現在的問題是:當你沒$處理=的fopen($文件路徑, 「RB」); PHP的fopen試圖找到文件。無法找到文件,它會生成一個錯誤,導致一些輸出被髮送到流。輸出已經發送到流;它已不再可能發送一個頭......如此的if-else語句可以做的伎倆

<?php 


     $filepath = "page-1.php"; 

     if(file_exists($filepath) && ($handle = @fopen($filepath, "rb"))){ 
      // WORK WITH YOUR $handle IN THIS BLOCK 
     }else{ 
      header("location: page-2.php"); // YOU SHOULD REDIRECT TO A LOCATION SENDING IT THE HEADER... 
      //header("location: page-1.php"); // SENDING TO THE SAME LOCATION WORKS AS WELL... 
      header("HTTP/1.0 404 Not Found"); 
      exit; 
     } 
+1

有你試過了嗎?順便說一句 - 什麼引起這個代碼中的例外?還有一個文件可以存在,但你可能無法讀取它! –

+0

@Ed Heal關於Try-Catch:也許沒有必要......現在走了...... ***也許你應該嘗試一下,並且更多地啓發我們...... ***在這裏嘗試了***; - )*** – Poiz

+0

@Poiz你不能同時使用'Location'和'404'頭文件。 – Barmar

1

這是你想要

$handle = fopen($filepath, "rb"); 

if ($handle === false) { 
    http_response_code(404); 
    exit; 
} 

代碼它集響應代碼當您無法打開文件(根據手冊頁)

+0

爲什麼你需要嚴格的比較?任何成功的'$ handle'值都是真的。 – Barmar

+0

只是迂腐,我想 –

+0

一個答案應該解決這個問題,不只是表現出一種不同的方式來做到這一點。如果他的原始代碼不起作用,那麼沒有理由期望它能更好地工作,是嗎? – Barmar

1

所以,因爲這個話題是越來越大我不知道我會得到這麼多的反應。謝謝你們!

所以,這個問題實際上是不是代碼我...我是從字面上傻了,這是給我一個404沒有發現這整個時間,但它似乎並不像它的一些原因。 Protip,不要關閉錯誤報告,並有一個可選的PHP功能抑制錯誤&標題。

感謝所有,但實際上是在代碼中沒有錯誤,只是我純粹的愚蠢。

+0

這不應該是一個答案,因爲它不會爲將來的讀者提供任何有關如何解決問題的有用信息。由於該問題沒有任何回覆,我認爲你可以刪除它。如果沒有,請將其標記爲主持人關閉它。 – Barmar

相關問題