Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/08/2009, 13:03
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Continuación de los ejemplos...

Si quieres obtener una URL remota, pero no quieres esperar demasiado tiempo si el servidor remoto está ocupado o lento.

Configurar tiempo limite con file_get_contents()
Nota: Estableceremos el tiempo limite a 15 segundos
Código PHP:
Ver original
  1. <?php
  2. ini_set('default_socket_timeout', 15);
  3. $page = file_get_contents('http://slow.example.com/');
  4. echo $page;
  5.  
  6. // o se puede limitar también
  7. $context = stream_context_create(array('http' => array('timeout' => 10)));
  8. $page = file_get_contents('http://slow.example.com/', 0, $context);
  9. // Ejemplo de uso lo podemos ver en
  10. // http://www.forosdelweb.com/f18/file_get_contents-falla-947572/

Configurar tiempo limite con cURL
Nota: Estableceremos el tiempo limite a 15 segundos
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://slow.example.com/');
  3. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 15);
  5. $page = curl_exec($c);
  6. echo $page;
  7. ?>

Configurar tiempo limite con HTTP_Request
Nota: Estableceremos el tiempo limite a 15 segundos
Código PHP:
Ver original
  1. <?php
  2. require_once 'HTTP/Request.php';
  3. $opts = array('timeout' => 15);
  4. $req = new HTTP_Request('http://slow.example.com/', $opts);
  5. $req->sendRequest();
  6. ?>




Si dependes de un servicio remoto, puede estar funcionando y en marcha, pero no estara en condiciones de manejar sus pedidos debido a problemas de red entre tu servidor y el servidor remoto. Limitar la cantidad de tiempo que espera de PHP para conectar a un servidor remoto es una buena idea, si se utilizan datos procedentes de fuentes remotas que sea parte del proceso de construcción de la página.

Todas las técnicas que describiremos limita la cantidad de tiempo de espera de PHP para conectar a un servidor remoto. Si estas realmente preocupado por las respuestas rápidas, adicionalmente configura el límite de cuánto tiempo PHP espera recibir los datos de los zócalos conectados. Para una conexión stream, utilice la función de stream_set_timeout(). Para esta función necesitas abrir un stream con fopen() y no con file_get_contents(). En los ejemplo limitaremos el tiempo de leer a 20 segundos.

Aunque el establecimiento de conexión y los tiempos de lectura puede mejorar el rendimiento, también puede dar lugar a respuestas ilegibles. La secuencia de comandos puede leer sólo una respuesta parcial ante un tiempo de expiración. Si ha establecido los tiempos, asegúrese de validar toda la respuesta que ha recibido. Por otra parte, en situaciones en las que la generación de la página rápido es fundamental, puedes recuperar los datos externos en un proceso separado y escribir a una memoria caché local. De esta forma, sus páginas pueden usar el caché, sin temor a límites de tiempo o respuestas parciales.

Configurar el tiempo de leer con fopen()
Código PHP:
Ver original
  1. <?php
  2. $url = 'http://slow.example.com';
  3. $stream = fopen($url, 'r');
  4. stream_set_timeout($stream, 20);
  5. $response_body = stream_get_contents($stream);
  6. echo $response_body;
  7. ?>

Configurar el tiempo de leer con cURL
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://slow.example.com/');
  3. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 15);
  5. curl_setopt($c, CURLOPT_TIMEOUT, 20);
  6. $page = curl_exec($c);
  7. echo $page;
  8. ?>

Configurar el tiempo de leer con HTTP_Request
Código PHP:
Ver original
  1. <?php
  2. require_once 'HTTP/Request.php';
  3. $opts = array('readTimeout' => array(20,0));
  4. $req = new HTTP_Request('http://slow.example.com/', $opts);
  5. $req->sendRequest();
  6. ?>

Última edición por abimaelrc; 30/09/2011 a las 00:54