2009-10-02 2 views
1

вот код:Захват ошибки PHP «file_get_contents» тихо

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 = истина (без ошибок) все, выздороветь когда file_get_contents = ложь я Жюст получил большое сообщение об ошибке на экране ... я просто хочу протестировать его, а не выполнить его!

КАК?

здесь сообщение об ошибке:

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

ответ

10

Быстрый способ:

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

'@' подавляет ошибки.

Потенциально лучший способ это просто тест:

if (! file_exists($jsonaddress)){ 

Может хорошо делать, что вы хотите (если вы можете получить получить поток, а просто вернуть ложь, если это не получится) ... но я «Не знаю, как хорошо это будет работать. (Не пробовал, что с FOPEN оберток недавно)

+0

Вы гений ... и быстро! – menardmam

+0

@ часто считается плохой формой - так придерживайтесь второго примера Тима. В зависимости от того, как настроен ваш php.ini, вам может потребоваться посмотреть библиотеки cURL, чтобы получить внешний файл. – alex

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 
} 
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; 
Смежные вопросы