2016-05-14 16 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

Haveあなたはこれを試しましたか?ところで、このコードでは何が例外になりますか?また、ファイルが存在する可能性がありますが、そのファイルを読むことができない場合があります。 –

+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関数surfpressエラー&ヘッダーを使用しないでください。

おかげで、すべて、しかし、実際にはちょうど私の純粋な愚かさのコードではエラーがなかったです。

+0

これは将来の読者に問題の解決方法について有益な情報を提供しないため、これは答えではありません。質問には何もアップしていないので、あなたはそれを削除できると思う。そうでない場合は、モデレータがそれを閉じるようにフラグを立てます。 – Barmar

関連する問題