2015-10-18 12 views
0
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) "" 

我不会收到异常,没有错误,只是每个URL都为空。有效的网址返回这个片段的正确内容。为什么我无法获取无效URL的例外情况? 我来到这个问题,因为在同一台服务器上的wget导致一个有效的回报,但与PHP脚本我无法file()相同的URL。真的很奇怪,我不知道如何调试它。php file()不会触发有效URL上的异常

回答

1

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

如果文件名不能找到,将产生一个E_WARNING电平误差,最大长度小于零,或者如果寻求到流中指定偏移量失败。

您应该像检查一样检查false返回,并且不希望发现异常。

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

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