¿Cómo puedo manejar la advertencia de la función file_get_contents() en PHP? [duplicar]
Escribí un código PHP como este
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
Pero cuando elimino "http://" $site
aparece la siguiente advertencia:
Advertencia: file_get_contents(www.google.com) [function.file-get-contents]: no se pudo abrir la transmisión:
Lo intenté try
y catch
no funcionó.
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);
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.
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_last
para obtener el texto del último error y file_get_contents
devuelve falso en caso de error, por lo que un simple "si" puede detectarlo.