Php 如果fopen没有';不存在,它不存在';t将标题更改为404?
Fopen可以工作,我可以读取文件和内容,但是当我指定一个无效的文件时,我希望它返回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尝试定位文件。
$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
值都是真实的。我认为学究式的回答应该能够解决问题,而不仅仅是展示一种不同的方法。如果他的原始代码不起作用,就没有理由期望它能更好地工作,是吗?这不应该是一个答案,因为它不能为未来的读者提供任何关于如何解决问题的有用信息。因为这个问题没有经过投票表决的答案,我想你可以删除它。如果没有,请将其标记为版主关闭。