静默捕获php“file_get_contents”的错误

时间:2009-10-02 00:40:37

标签: php

这是代码:

if( false == (file_get_contents($jsonaddress)))
{
    //error
    print ('Error with stream, getting file instead !<br />');
    $jsonaddress = 'listedesodeurs.txt';
} 

else 
{
    //noerror
    print ('Sucessfully GET data from JSON stream<br />');
    $jsoncontent = file_get_contents($jsonaddress);
    $size = file_put_contents('listedesodeurs.txt', $jsoncontent);
    echo ('Making backup of stream in file : '.round(($size/1024),0).' KB <br />');
}

当file_get_contents = true(没有错误)时,一切都很顺利 当file_get_contents = false时,我juste在屏幕上收到了大错误信息...我只想测试它,而不是执行它!

如何?

这是错误消息:

[function.file-get-contents]: failed to open stream: Inappropriate ioctl for device in 

3 个答案:

答案 0 :(得分:10)

快捷方式:

if( false == (@file_get_contents($jsonaddress)))

'@'抑制错误。

一种可能更好的方法就是测试:

if (! file_exists($jsonaddress)){

你可以随心所欲(看看你是否可以获得流,但只要失败就返回false)......但我不确定它会有多好用。 (最近还没试过fopen包装)

答案 1 :(得分:4)

您还可以查看is_readable()以查看file_get_contents()是否可能失败:

if(is_readable($jsonaddress)) {
    // noerror
    print ('Sucessfully GET data from JSON stream<br />');
    ... etc
}
else {
    // error
    print ('Error with stream, getting file instead !<br />');
    ... etc
}

答案 2 :(得分:1)

您可以将流上下文传递给file_get_contents,这样可以更好地控制行为。特别是,您可以使用 ignore_errors

$content = file_get_contents(
  $jsonaddress, false, 
  stream_context_create(
    array(
      'http' => array(
        'ignore_errors' => true))));
$ok = preg_replace('/^.*([0-9]{3}).*$/', '$1', $http_response_header[0]) == 200;