¿Cómo puedo manejar la advertencia de la función file_get_contents() en PHP? [duplicar]

Resuelto Waseem asked hace 54 años • 17 respuestas

Escribí un código PHP como este

$site="http://www.google.com";
$content = file_get_content($site);
echo $content;

Pero cuando elimino "http://" $siteaparece la siguiente advertencia:

Advertencia: file_get_contents(www.google.com) [function.file-get-contents]: no se pudo abrir la transmisión:

Lo intenté tryy catchno funcionó.

Waseem avatar Jan 01 '70 08:01 Waseem
Aceptado

Paso 1: verifique el código de retorno:if($content === FALSE) { // handle error here... }

Paso 2: suprima la advertencia colocando un operador de control de errores (es decir @, ) delante de la llamada a file_get_contents() : $content = @file_get_contents($site);

Roel avatar Nov 07 '2008 15:11 Roel

También puede configurar su controlador de errores como una función anónima que llama a una excepción y usa un try/catch en esa excepción.

set_error_handler(
    function ($severity, $message, $file, $line) {
        throw new ErrorException($message, $severity, $severity, $file, $line);
    }
);

try {
    file_get_contents('www.google.com');
}
catch (Exception $e) {
    echo $e->getMessage();
}

restore_error_handler();

Parece mucho código para detectar un pequeño error, pero si usa excepciones en toda su aplicación, solo necesitará hacerlo una vez, en la parte superior (en un archivo de configuración incluido, por ejemplo), y lo hará. convierta todos sus errores en excepciones en todo momento.

enobrev avatar Aug 04 '2010 13:08 enobrev

Mi forma favorita de hacer esto es bastante simple:

if (($data = @file_get_contents("http://www.google.com")) === false) {
      $error = error_get_last();
      echo "HTTP request failed. Error was: " . $error['message'];
} else {
      echo "Everything went better than expected";
}

Encontré esto después de experimentar con try/catch@enobrev arriba, pero esto permite un código menos largo (y, en mi opinión, más legible). Simplemente lo usamos error_get_lastpara obtener el texto del último error y file_get_contentsdevuelve falso en caso de error, por lo que un simple "si" puede detectarlo.

Laurie avatar Nov 13 '2012 17:11 Laurie