corvus
Guest
POP3, fsockopen, feof
Соединение и залогинивание происходит нормально, получение списка писем тоже.
А вот дальше пытаюсь принять нужное письмо командой
И ни фига не получается - начинается бесконечное ожидание.
Фишка в том, что даже если написать
где $vol - размер письма в байтах, вытащенный из списка писем,
за одно обращение возвращается только одна строка.
В то же время если взять $count, заведомо меньший числа строк в письме
(реальное число строк мы не знаем, поскольку строки имеют разную длину),
то часть письма удаётся получить
В ряде источников рекомендуют установить режим non-blocking командой
socket_set_blocking ($sock, $mode), пробовал $mode и true и false - не помогает.
В других источниках рекомендуют вместо feof() делать так:
но и так всё тоже самое - висяк ! :-(
Только прошу не отсылать меня к IMAP - должен же быть способ получать письма по РОР3 !?
Соединение и залогинивание происходит нормально, получение списка писем тоже.
А вот дальше пытаюсь принять нужное письмо командой
PHP:
fputs ($sock, "RETR ".$num."\r\n" );
$s = "";
while (!feof($sock))
$s .= trim(fgets($sock, 100));
echo $s;
Фишка в том, что даже если написать
PHP:
while (!feof($sock))
$s .= trim(fgets($sock, $vol));
за одно обращение возвращается только одна строка.
В то же время если взять $count, заведомо меньший числа строк в письме
(реальное число строк мы не знаем, поскольку строки имеют разную длину),
то часть письма удаётся получить
PHP:
for($i = 1 ; $i < $count ; $i++) {
$s .= trim(fgets($sock, 100));
}
socket_set_blocking ($sock, $mode), пробовал $mode и true и false - не помогает.
В других источниках рекомендуют вместо feof() делать так:
PHP:
$meta = stream_get_meta_data ($sock);
while (!$meta['eof'])
$s .= trim(fgets($sock, 100));
Только прошу не отсылать меня к IMAP - должен же быть способ получать письма по РОР3 !?