如果fopen不存在,它不会将标题更改为404?

时间:2016-05-14 07:55:47

标签: php fopen

Fopen工作,我可以读取文件和内容,但是当我指定一个无效的文件时,我希望它返回404标题,但它不能完全正常工作。

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

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

在这里我读过的大约5篇帖子中,这些都是例子,它们看起来和我一样。

3 个答案:

答案 0 :(得分:1)

这是您想要的代码

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

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

当您无法打开文件时(根据手册页)

,它会设置响应代码

答案 1 :(得分:1)

所以,由于这个话题越来越大,我没有意识到我得到了这么多回复。谢谢大家!

所以,这个问题实际上并不是我所拥有的代码......我实际上是愚蠢的,它一直给我一个404 Not Found,但由于某种原因它似乎并不像。 Protip,不要关闭错误报告,并有一个替代PHP函数surpress错误&头。

谢谢大家,但代码中确实没有错误,只是我纯粹的愚蠢。

答案 2 :(得分:-1)

以下是问题:当您执行 $ handle = fopen($ filepath," rb"); PHP的fopen尝试找到文件。如果找不到文件,它会生成一个错误,导致一些输出被发送到Stream。输出已经发送到Stream;它不再可能发送标题...所以 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;
        }