5 votes

Impossible d'attraper l'erreur PHP file_get_contents en utilisant le bloc try catch

J'essaie de récupérer une image en utilisant file_get_contents mais cela donne une erreur. Pour gérer l'erreur, j'utilise le bloc try catch mais il n'attrape pas l'erreur et échoue.

Mon code :

try {
     $url = 'http://wxdex.ocm/pdd.jpg'; //dummy url
     $file_content = file_get_contents($url);
}
catch(Exception $e) {
     echo 'Error Caught';           
}

Erreur :

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: No such host is known
Warning: file_get_contents(http://wxdex.ocm/pdd.jpg): failed to open stream: php_network_getaddresses: getaddrinfo failed: No such host is known.

NOTE: : Je suis capable de récupérer n'importe quelle autre url d'image valide à distance.

7voto

edisoni.1337 Points 2226

try/catch ne fonctionne pas car un warning n'est pas un exception .

Vous pouvez essayer ce code afin d'attraper également les avertissements.

//set your own error handler before the call
set_error_handler(function ($err_severity, $err_msg, $err_file, $err_line, array $err_context)
{
    throw new ErrorException( $err_msg, 0, $err_severity, $err_file, $err_line );
}, E_WARNING);

try {
    $url = 'http://wxdex.ocm/pdd.jpg';
    $file_content = file_get_contents($url);
} catch (Exception $e) {
    echo 'Error Caught'; 
}

//restore the previous error handler
restore_error_handler();

0voto

Mahesh Hegde Points 618

La méthode suivante est une alternative, il suffit de vérifier les données, sinon nous pouvons lancer l'exception pour la gérer. Ce sera plus sûr que de définir un nouveau gestionnaire d'erreur.

try {
    $url = 'http://wxdex.ocm/pdd.jpg';
    $file_content = file_get_contents($url);
    if(empty($file_content)){
       throw new Exception("failed to open stream ", 1);
    }else{
       echo "File is loaded and content is there";
     }

} catch (Exception $e) {
   echo 'Error Caught'; 
}

0voto

neeraj k venu Points 1

Vérifier que l'URL existe avant cela en utilisant la fonction "get header".

$url = 'http://wxdex.ocm/pdd.jpg';
$file_headers = @get_headers($url);

if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found' ||trim($file_headers[0]) == 'HTTP/1.1 403 Forbidden') {
    $exists = false;
}else{
    $exists = true;
}
if($exists===true){

    $file_content = file_get_contents($url);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X