Вот код, который я использую:
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); }
Я получаю первый ответ:
OK Gimap ready for requests from xx.xx.xx.xx v3if9968808ibd.15
но затем страница разрывается. Я просмотрел stream_set_blocking, stream_set_timeout, stream_select, fread и т. Д., Но не смог заставить его работать. Мне нужно прочитать все данные, которые посылает сервер, а затем продолжить работу с другими командами (я получаю электронные письма с помощью imap).
благодаря
Ваш скрипт висит в цикле while в конце. Это потому, что вы использовали !feof()
как условие для цикла, и сервер не закрывает соединение. Это означает, что feof()
всегда возвращает false
и цикл будет продолжаться вечно.
Это не будет проблемой, если вы напишете полную реализацию, так как вы будете искать коды ответов и можете выйти из цикла соответственно, например:
<?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!";
Ваш скрипт должен работать. Фактически, он работает.
Посмотрите результаты ниже на моем компьютере, когда я запустил ваш код:
* 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
Поскольку gmail не отключает вас. Никакого конца файла не происходит. И загрузка страницы просто время от времени.
Другими словами: ваш скрипт будет просто ждать и ждать, пока gmail не отключится, что, к сожалению, произойдет после того, как загрузка страницы уже отключена.