Escribí un código PHP como este
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
Pero cuando elimino "http: //" $site
recibo 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ó.
php
function
exception-handling
warnings
Waseem
fuente
fuente
Respuestas:
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 para file_get_contents () :$content = @file_get_contents($site);
fuente
@
puede afectar negativamente el rendimiento. Vea esta respuesta en una publicación relacionada que explica bastante bien.También puede configurar su controlador de errores como una función anónima que llama a una excepción y usar un try / catch en esa excepción.
Parece una gran cantidad de código para detectar un pequeño error, pero si usa excepciones en toda su aplicación, solo necesitaría hacer esto una vez, en la parte superior (en un archivo de configuración incluido, por ejemplo), y lo hará Convierta todos sus errores a Excepciones en todo momento.
fuente
Mi forma favorita de hacer esto es bastante simple:
Encontré esto después de experimentar con el
try/catch
@enobrev anterior, pero esto permite un código menos extenso (e IMO, más legible). Simplemente utilizamoserror_get_last
para obtener el texto del último error yfile_get_contents
devuelve falso en caso de error, por lo que un simple "si" puede captar eso.fuente
@file_get_contents
suprima el informe de errores al navegador.@file_get_contents
para suprimir la advertencia y probar el valor del resultado usando=== FALSE
.if (false !== ($data = file_get_contents ()))
error_get_last
que no devuelva nada en mi experienciaPuedes anteponer una @:
$content = @file_get_contents($site);
Esto eliminará cualquier advertencia. ¡Úselo con moderación! . Ver operadores de control de errores
Editar: cuando elimina el 'http: //' ya no busca una página web, sino un archivo en su disco llamado "www.google ....."
fuente
Una alternativa es suprimir el error y también lanzar una excepción que puede detectar más adelante. Esto es especialmente útil si hay múltiples llamadas a file_get_contents () en su código, ya que no necesita suprimirlas y manejarlas todas manualmente. En cambio, se pueden hacer varias llamadas a esta función en un solo bloque try / catch.
fuente
Así es como lo hice ... No es necesario el bloque try-catch ... La mejor solución es siempre la más simple ... ¡Disfruta!
fuente
$http_response_header
no se actualiza en ese caso, ya que no se recibe respuesta HTTP.fuente
$url
no se encuentra el 404, aún aparecerá la advertencia.ignore_errors
solo indica al contexto HTTP que no interprete los códigos de estado de respuesta HTTP > = 400 como errores. Si bien está marginalmente relacionado, eso no responde a la pregunta sobre el manejo de errores de PHP.ignore_errors
opción! ¡Esto es lo que necesitaba!Así es como manejo eso:
fuente
Lo mejor sería configurar sus propios controladores de errores y excepciones, que harán algo útil como registrarlo en un archivo o enviar correos electrónicos críticos. http://www.php.net/set_error_handler
fuente
Podrías usar este script
fuente
if ($url === true)...
porque si se obtiene como respuesta0
o está vacío, aumenta el error de conexión.Desde PHP 4 use error_reporting () :
fuente
La manera más simple de hacer esto es anteponer una @ antes de file_get_contents, i. mi.:
fuente
algo como esto:
fuente
fuente
Debe usar la función file_exists () antes de usar file_get_contents (). De esta manera evitarás la advertencia de php.
fuente
Cambiar el archivo php.ini
fuente
Esto intentará obtener los datos, si no funciona, detectará el error y le permitirá hacer todo lo que necesite dentro de la captura.
fuente
fuente
También debe configurar el
en tu
php.ini
para dejar de recibir advertencias.fuente