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



Answers

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

set_error_handler(
    create_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 que hay un montón de código para detectar un pequeño error, pero si está utilizando excepciones en su aplicación, solo tendría que hacer esto una vez, en la parte superior (en un archivo de configuración incluido, por ejemplo), y lo hará convierte todos tus errores a Excepciones en todo.

Question

Escribí un código PHP como este

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

Pero cuando elimino "http: //" de $site recibo la siguiente advertencia:

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

Intenté try catch pero no funcionó.




Solución 2018:

Aquí hay toneladas de respuestas y nada funciona correctamente. Si suprime file_get_contents con un @ , recibirá NULL y no false como algunos usuarios alegaron. Entonces tienes que hacer esto:

    $request = @file_get_contents = ...
    if (empty($request)) echo 'Connection error occured...';



Puede anteponer un @: $content = @file_get_contents($site);

Esto suprimirá cualquier advertencia. ¡Úselo con moderación! . Ver operadores de control de errores

Editar: cuando elimina el 'http: //' ya no está buscando una página web, sino un archivo en su disco llamado "www.google ..."




Debería usar la función file_exists () antes para usar file_get_contents (). De esta forma, evitarás la advertencia php.

$file = "path/to/file";

if(file_exists($file)){
  $content = file_get_contents($file);
}



Podría usar este script

$url = @file_get_contents("http://www.itreb.info");
if ($url) {
    // if url is true execute this 
    echo $url;
} else {
    // if not exceute this 
    echo "connection error";
}



Así es como manejo eso:

    $this->response_body = @file_get_contents($this->url, false, $context);
    if ($this->response_body === false)
    {
        $error = error_get_last();
        $error = explode(': ', $error['message']);
        $error = trim($error[2]) . PHP_EOL;
        fprintf(STDERR, 'Error: '. $error);
        die();
    }



Cambia el archivo php.ini

allow_url_fopen = On

allow_url_include = On



Así es como lo hice ... No hay necesidad de probar el bloqueo ... La mejor solución es siempre la más simple ... ¡Disfrútalo!

$content = @file_get_contents("http://www.google.com");
if (strpos($http_response_header[0], "200")) { 
   echo "SUCCESS";
} else { 
   echo "FAILED";
} 



Links