Aquí está el código que estoy usando:

if (!($fp = fsockopen('ssl://imap.gmail.com', '993', $errno, $errstr, 15)))
    echo "Could not connect to host";
$server_response = fread($fp, 256);
echo $server_response;

fwrite($fp, "C01 CAPABILITY"."\r\n");
while (!feof($fp)) {
    echo fgets($fp, 256);
}

Pongo la primera respuesta:

OK Gimap ready for requests from xx.xx.xx.xx v3if9968808ibd.15 

pero, a continuación, la página de veces. He buscado a través de stream_set_blocking, stream_set_timeout, stream_select, fread, etc. pero no podía llegar a trabajar. Tengo que leer todos los datos que envía el servidor y, a continuación, proceder con otros comandos (yo sería recuperar mensajes de correo electrónico mediante imap).

Gracias

Está Usted seguro de que la respuesta sólo es de 256 caracteres de largo? Y está seguro de que el zócalo es de escritura? Es posible que Su guión se cuelga en fwrite() porque de socket no es grabable…
Sí. He probado que mediante la sustitución del tiempo de bucle simple de la escritura de fgets($fp,256) dos veces. Y esta es la respuesta que obtengo : * CAPACIDAD de IMAP4rev1 anular la selección de RALENTÍ del espacio de NOMBRES de la CUOTA de IDENTIFICACIÓN de XLIST NIÑOS X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH C01 OK

OriginalEl autor victor_golf | 2012-05-04

2 Comentarios

  1. 8

    Su guión está colgando en el tiempo del lazo en el extremo. Esto es porque usted ha usado !feof() como la condición del bucle, y el servidor no se está cerrando la conexión. Esto significa que el feof() siempre devolverá false y el bucle continuará para siempre.

    Esto no será problema cuando su escritura una implementación completa, ya que estarán buscando los códigos de respuesta y puede salir del bucle en consecuencia, por ejemplo:

    <?php
    
      //Open a socket
      if (!($fp = fsockopen('ssl://imap.gmail.com', 993, $errno, $errstr, 15))) {
          die("Could not connect to host");
      }
    
      //Set timout to 1 second
      if (!stream_set_timeout($fp, 1)) die("Could not set timeout");
    
      //Fetch first line of response and echo it
      echo fgets($fp);
    
      //Send data to server
      echo "Writing data...";
      fwrite($fp, "C01 CAPABILITY\r\n");
      echo " Done\r\n";
    
      //Keep fetching lines until response code is correct
      while ($line = fgets($fp)) {
        echo $line;
        $line = preg_split('/\s+/', $line, 0, PREG_SPLIT_NO_EMPTY);
        $code = $line[0];
        if (strtoupper($code) == 'C01') {
          break;
        }
      }
    
      echo "I've finished!";
    Gracias. Ahora sólo me falta averiguar los códigos de respuesta para otros comandos…
    Rfc son tus amigos 😉 (no te olvides de error de identificador respuestas, o la secuencia de comandos se bloqueará para siempre a la espera para el C01 respuesta que nunca llegará)
    Sí. He estado yendo a través de los comandos por algún tiempo ahora. Gracias de nuevo.

    OriginalEl autor DaveRandom

  2. 1

    La secuencia de comandos debe estar trabajando. De hecho, está trabajando.

    Ver los resultados a continuación, en mi pc cuando me encontré con el código:

    * OK Gimap ready for requests from xx.xx.xx.xx l5if4585958ebb.20
    * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY  SASL-IR AUTH=XOAUTH
    C01 OK Thats all she wrote! l5if4585958ebb.20

    Desde gmail no desconecte. No fin de archivo se produce. Y la carga de la página, simplemente, el tiempo de espera.

    En otras palabras: el script seguirá esperando y esperando hasta que gmail no desconectar, que por desgracia sucede después de que su carga de la página ya ha agotado.

    ¿A obtener el resultado de inmediato, o se tomó un poco de tiempo (1-2min) tiempo de espera??
    Probablemente el problema sea que usted está tratando de ejecutar desde una página web que estoy en lo cierto? La página de veces antes de gmail se desconecta (así feof() nunca devuelve true). Probablemente pierde parte de la memoria intermedia en el proceso de que se agote el tiempo.
    Sí. Tengo un .página php que tiene este código. ¿Cuál es el problema?
    Recibo la siguiente respuesta, pero después de 2min de la carga de la página: * ACEPTAR Gimap listo para las solicitudes de xx.xx.xx.xx vb10if10168308icb.24 * CAPACIDAD de IMAP4rev1 anular la selección de RALENTÍ del espacio de NOMBRES de la CUOTA de IDENTIFICACIÓN de XLIST NIÑOS X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH C01 OK Eso es todo lo que escribió! vb10if10168308icb.24 ¿Cómo puedo lidiar con el tiempo, ya que stream_set_timeout($fp,1) no parece funcionar..
    El código funciona. Usted debe buscar para que C01 ACEPTAR en lugar de esperar a final de archivo

    OriginalEl autor Woutifier

Dejar respuesta

Please enter your comment!
Please enter your name here