php file()在有效的URL上不会触发异常

时间:2015-10-18 19:49:47

标签: file exception

    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文件。真的很奇怪,我不知道如何调试它。

1 个答案:

答案 0 :(得分:1)

如果找不到该文件,它不会抛出异常;它会引发警告级错误。那是不同的事情。 From the docs

  

如果找不到文件名,maxlength小于零,或者在流中寻找指定的偏移量失败,则会生成 E_WARNING 级错误。

你应该像往常一样检查false返回,并且不要期望发现异常。

在获取远程服务器可能返回错误状态代码(而不是预期的404)的URL时,请记住,导致脚本认为文件不存在。您可能还需要检查空值("")。

通常,您应该避免使用file_get_contents通过HTTP访问文件。它不是非常安全,许多主机甚至不允许你这样使用它。相反,请使用cURL,它专门用于通过Web检索数据,包括通过HTTP。