read funciona file_get_contents example ejemplos php file-get-contents

funciona - file_get_contents("php://input")



file_get_contents cuando la url no existe (7)

Estoy usando file_get_contents () para acceder a una URL.

file_get_contents(''http://somenotrealurl.com/notrealpage'');

Si la URL no es real, devuelve este mensaje de error. ¿Cómo puedo hacer que se cometa correctamente el error para saber que la página no existe y actuar en consecuencia sin mostrar este mensaje de error?

file_get_contents(''http://somenotrealurl.com/notrealpage'') [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in myphppage.php on line 3

por ejemplo, en zend puede decir: if ($request->isSuccessful())

$client = New Zend_Http_Client(); $client->setUri(''http://someurl.com/somepage''); $request = $client->request(); if ($request->isSuccessful()) { //do stuff with the result }


Cada vez que llama a file_get_contents con un contenedor http, se crea una variable en el ámbito local: $http_response_header

Esta variable contiene todos los encabezados HTTP. Este método es mejor sobre la función get_headers() ya que solo se ejecuta una solicitud.

Nota: 2 solicitudes diferentes pueden terminar de manera diferente. Por ejemplo, get_headers() devolverá 503 y file_get_contents () devolverá 200. Y obtendría una salida adecuada pero no la usaría debido al error 503 en la llamada a get_headers ().

function getUrl($url) { $content = file_get_contents($url); // you can add some code to extract/parse response number from first header. // For example from "HTTP/1.1 200 OK" string. return array( ''headers'' => $http_response_header, ''content'' => $content ); } // Handle 40x and 50x errors $response = getUrl("http://example.com/secret-message"); if ($response[''content''] === FALSE) echo $response[''headers''][0]; // HTTP/1.1 401 Unauthorized else echo $response[''content''];

Este enfoque también le permite tener un registro de pocos encabezados de solicitud almacenados en diferentes variables, ya que si utiliza file_get_contents (), $http_response_header se sobrescribe en el ámbito local.


Con dichos comandos en PHP, puede prefijarlos con una @ para suprimir tales advertencias.

@file_get_contents(''http://somenotrealurl.com/notrealpage'');

file_get_contents() devuelve FALSE si se produce un error, por lo que si compara el resultado devuelto con eso, entonces puede manejar el error

$pageDocument = @file_get_contents(''http://somenotrealurl.com/notrealpage''); if ($pageDocument === false) { // Handle error }


Necesitas verificar el código de respuesta HTTP :

function get_http_response_code($url) { $headers = get_headers($url); return substr($headers[0], 9, 3); } if(get_http_response_code(''http://somenotrealurl.com/notrealpage'') != "200"){ echo "error"; }else{ file_get_contents(''http://somenotrealurl.com/notrealpage''); }


Para evitar solicitudes dobles como lo comenta Orbling en la respuesta de , puede combinar sus respuestas. Si obtiene una respuesta válida en primer lugar, use eso. Si no es así, averigüe cuál fue el problema (si es necesario).

$urlToGet = ''http://somenotrealurl.com/notrealpage''; $pageDocument = @file_get_contents($urlToGet); if ($pageDocument === false) { $headers = get_headers($urlToGet); $responseCode = substr($headers[0], 9, 3); // Handle errors based on response code if ($responseCode == ''404'') { //do something, page is missing } // Etc. } else { // Use $pageDocument, echo or whatever you are doing }


Puede agregar ''ignore_errors'' => true a las opciones:

$options = array( ''http'' => array( ''ignore_errors'' => true, ''header'' => "Content-Type: application/json/r/n" ) ); $context = stream_context_create($options); $result = file_get_contents(''http://example.com'', false, $context);

En ese caso, podrá leer una respuesta del servidor.


Sencillo y funcional (fácil de usar en cualquier lugar):

function file_contents_exist($url, $response_code = 200) { $headers = get_headers($url); if (substr($headers[0], 9, 3) == $response_code) { return TRUE; } else { return FALSE; } }

Ejemplo:

$file_path = ''http://www.google.com''; if(file_contents_exist($file_path)) { $file = file_get_contents($file_path); }


Si bien file_get_contents es muy conciso y conveniente, tiendo a favorecer la biblioteca Curl para un mejor control. Aquí hay un ejemplo.

function fetchUrl($uri) { $handle = curl_init(); curl_setopt($handle, CURLOPT_URL, $uri); curl_setopt($handle, CURLOPT_POST, false); curl_setopt($handle, CURLOPT_BINARYTRANSFER, false); curl_setopt($handle, CURLOPT_HEADER, true); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 10); $response = curl_exec($handle); $hlength = curl_getinfo($handle, CURLINFO_HEADER_SIZE); $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); $body = substr($response, $hlength); // If HTTP response is not 200, throw exception if ($httpCode != 200) { throw new Exception($httpCode); } return $body; } $url = ''http://some.host.com/path/to/doc''; try { $response = fetchUrl($url); } catch (Exception $e) { error_log(''Fetch URL failed: '' . $e->getMessage() . '' for '' . $url); }