try {
$antwort = file_get_contents('http://not_existing.notnotnot', false);
if($antwort===false) echo 'ERROR';
} catch(Exception $e) {
$e->getMessage();
}
var_dump($antwort); // returns string(0) ""
我没有Exception,没有false,只是每个URL的空内容。有效的网址会在此代码段中返回正确的内容。为什么我无法获取无效网址的例外情况? 我来到这个问题是因为同一台服务器上的wget会导致有效的返回,但是使用php脚本我无法将()相同的URL文件。真的很奇怪,我不知道如何调试它。
答案 0 :(得分:1)
如果找不到该文件,它不会抛出异常;它会引发警告级错误。那是不同的事情。 From the docs:
如果找不到文件名,maxlength小于零,或者在流中寻找指定的偏移量失败,则会生成 E_WARNING 级错误。
你应该像往常一样检查false
返回,并且不要期望发现异常。
在获取远程服务器可能返回错误状态代码(而不是预期的404)的URL时,请记住,导致脚本认为文件不存在。您可能还需要检查空值(""
)。
通常,您应该避免使用file_get_contents
通过HTTP访问文件。它不是非常安全,许多主机甚至不允许你这样使用它。相反,请使用cURL,它专门用于通过Web检索数据,包括通过HTTP。