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


if fopen doesn't exist, it doesn't change the header to 404?

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

$handle = fopen($filepath, "rb");
if (!$handle) {
    header("HTTP/1.0 404 Not Found");
    exit;
}

在我读过的大约5篇文章中,这些都是例子,对我来说它们看起来都一样

这是您想要的代码

$handle = fopen($filepath, "rb");
if ($handle === false) {
   http_response_code(404);
   exit;
}

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

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

所以,问题实际上不是我的代码。。。我真的很愚蠢,它一直给我一个404的Not Found,但出于某种原因,它看起来不像。Protip,不要关闭错误报告,并有一个替代PHP函数surpress errors&标头。

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

问题是:当您执行$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;
        }