2011-07-16 11 views

Respuesta

2

Use cURL en su lugar. Permite un control mucho mayor y le permite leer cualquier contenido recuperado y el código de estado.

61

Tienes que configure the stream wrapper para ignorar los errores:

ignore_errorsboolean buscar el contenido, incluso en los códigos de estado fracaso. Por defecto es FALSE

En otras palabras, hacen

echo file_get_contents(
    'http://stackoverflow.com/foo/bar', 
    false, 
    stream_context_create(
     array(
      'http' => array(
       'ignore_errors' => true 
      ) 
     ) 
    ) 
); 

y obtendrá la página 404.

Si quieres que este es el comportamiento por defecto para los flujos HTTP, utilice

stream_context_set_default(
    array('http' => array(
     'ignore_errors' => true) 
    ) 
); 

Cualquier llamada utilizando la envoltura de flujos HTTP utilizará estos ajustes a continuación, por ejemplo, puede simplemente hacer

echo file_get_contents('http://stackoverflow.com/foo/bar'); 

Si también desea obtener el response header, acaba de hacer

print_r($http_response_header); 

después de la llamada. La variable se vuelve a llenar después de cada llamada con una envoltura de flujo http.

+0

enfoque interesante - pero ¿puede decir si recibió un error o una respuesta exitosa? – sagi

+0

@sagi el código de respuesta estará en '$ http_reponse_header' – Gordon

+1

+1 Gordon tiene razón, la variable $ http_response_header contiene exactamente lo que dice en la lata, que obviamente incluye el código de estado. –

0

Paso 1: comprobar el código de retorno: $content = file_get_contents("websitelink"); if($content === FALSE) { // handle error here... }

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

Cuestiones relacionadas