Tengo el siguiente fragmento de código php

if($fp = fopen($url, 'r')) {
    stream_set_timeout($fp, 1); 
    stream_set_blocking($fp, 0);

}
$info = stream_get_meta_data($fp);

Me gustaría que la solicitud de tiempo de espera después de 1 segundo. Si pongo un sleep(20) en mi $url que estoy leyendo, que sólo espera el conjunto de 20 segundos y nunca se agota. Hay una manera mejor de hacer los tiempos de espera con fopen?

Si puedo usar ini_set('default_socket_timeout',2) por encima de que el código de tiempo de espera correctamente, pero $info, a continuación, se convierte en nula por lo que idealmente me gustaría utilizar las funciones de secuencia.

¿Qué se puede esperar de $info a ser cuando hay un tiempo de espera de conexión?

OriginalEl autor James | 2010-03-24

1 Comentario

  1. 10

    Puede utilizar stream_context_create() y la http contexto opción tiempo de espera. Pero fopen() todavía devolverá false si un tiempo de espera, y stream_get_meta_data() no funciona.

    $url = 'http://...';
    $context = stream_context_create( array(
      'http'=>array(
        'timeout' => 2.0
      )
    ));
    $fp = fopen($url, 'r', false, $context);
    if ( !$fp ) {
      echo '!fopen';
    }
    else {
      $info = stream_get_meta_data($fp);
      var_dump($info);
    }
    el único problema con eso es que el contexto no era agregado hasta php5 y el código que estoy escribiendo por desgracia debe ser compatible con php4 🙁
    El manual dice que PHP 4.3.0, así que debe ser bueno para ir, php.net/manual/en/function.stream-context-create.php
    he intentado «tiempo de espera» , pero cuando elegí el tiempo de espera = 2 , en realidad tomar 4 segundos de tiempo de espera, si el tiempo de espera = 15, en realidad, tomar 30 segundos de tiempo de espera. por qué?
    Mismo resultado aquí – tiempo de espera se duplicó.
    El «doble de tiempo de espera» ha sido informó que el proyecto de PHP, donde se dice que «no es un error». Un mantenedor de respuestas «el valor es usado tanto para el timeout de la conexión y, a continuación, de nuevo para el tiempo de espera de lectura».

    OriginalEl autor VolkerK

Dejar respuesta

Please enter your comment!
Please enter your name here