Php 如果fopen没有';不存在,它不存在';t将标题更改为404?

Php 如果fopen没有';不存在,它不存在';t将标题更改为404?,php,fopen,Php,Fopen,Fopen可以工作,我可以读取文件和内容,但是当我指定一个无效的文件时,我希望它返回404头,但它不能完全工作 $handle = fopen($filepath, "rb"); if (!$handle) { header("HTTP/1.0 404 Not Found"); exit; } 在我在这里读到的大约5篇文章中,这些都是例子,它们在我看来都是一样的。问题在于:当你这样做时,$handle=fopen($filepath,“rb”)PHP的fopen尝试定位文件。

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

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

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

在我在这里读到的大约5篇文章中,这些都是例子,它们在我看来都是一样的。

问题在于:当你这样做时,$handle=fopen($filepath,“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;
        }

这是您想要的代码

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

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

当您无法打开文件时,它会设置响应代码(根据手册页面)

因此,由于这个主题越来越大,我没有意识到会收到这么多响应。谢谢大家!

所以,问题其实不是我的代码。。。我真的很傻,它给了我一个404,但一直没有找到,但不知为什么它看起来不像。Protip,不要关闭错误报告,并使用另一个PHP函数来支持错误和标题


谢谢大家,但实际上代码中没有错误,只是我的愚蠢而已。

有关如何操作的信息,请参阅。我认为我们缺少了一些会重现问题的代码。您尝试过这个吗?顺便说一句,在这段代码中,什么会引发异常?文件也可以存在,但您可能无法读取它@艾德:也许没有必要。。。现在走了。。。也许你应该试试,给我们更多启发。。。在这里试过;-)@Poiz您不能同时使用
Location
404
标题。
Location
发送
301
响应代码,这与尝试发送
404
响应冲突。@EdHeal但是您现在测试过了吗。。。至少能给我们多一点启发?它是否返回上述404错误?为什么需要进行严格的比较?任何成功的
$handle
值都是真实的。我认为学究式的回答应该能够解决问题,而不仅仅是展示一种不同的方法。如果他的原始代码不起作用,就没有理由期望它能更好地工作,是吗?这不应该是一个答案,因为它不能为未来的读者提供任何关于如何解决问题的有用信息。因为这个问题没有经过投票表决的答案,我想你可以删除它。如果没有,请将其标记为版主关闭。