|
| Дата |
|
USD/RUB | 90.7493 | BTC/USD | 70679.0920 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
10.07.2009, 05:23
|
#1
|
Senior Member
Регистрация: 02.12.2008
Сообщений: 1,031
Бабло: $88718
|
Остановить fgets
Есть у меня такой скриптец скачивания писем по POP3:
PHP код:
$pop_conn = fsockopen("ssl://pop.gmail.com", 995,$errno, $errstr, 2);
$code=fgets($pop_conn,1024);
echo "$code<br>";
fputs($pop_conn,"USER username\r\n");
$code= fgets($pop_conn,1024);
echo "$code<br>";
fputs($pop_conn,"PASS pass\r\n");
$code= fgets($pop_conn,1024);
echo "$code<br>";
fputs($pop_conn,"RETR 1\r\n");
while (!feof($pop_conn)) {
$buffer = fgets($pop_conn, 4096);
echo $buffer;
}
Работает нормально,но,сука, fgets не видит окончания писем и не выходит из цикла.Как написать по человечески-помогите плз)
Последний раз редактировалось krokodile; 10.07.2009 в 06:15.
|
|
|
10.07.2009, 06:06
|
#2
|
Юниор
Регистрация: 03.10.2007
Сообщений: 25
Бабло: $6705
|
PHP код:
while(!feof($pop_conn))
{
$code=fgets($pop_conn,1024);
echo "$code<br>";
}
вроде так
|
|
|
10.07.2009, 06:14
|
#3
|
Senior Member
Регистрация: 02.12.2008
Сообщений: 1,031
Бабло: $88718
ТС -->
|
ТС
Цитата:
Сообщение от SsangYong
вроде так
|
Не,не помогает-всё равно не останавливается Чувствую,что туплю совсем жёстко,но ничего на ум не приходит.
|
|
|
10.07.2009, 06:19
|
#4
|
Ебланнед
Регистрация: 06.06.2007
Сообщений: 154
Бабло: $5450
|
А ты уверен что на этом программа зависает ? Какие ошибки выводит программа ?
__________________
Бан по мотивам этого топика - http://www.gofuckbiz.com/showthread.php?t=33220
|
|
|
10.07.2009, 06:51
|
#5
|
Senior Member
Регистрация: 02.12.2008
Сообщений: 1,031
Бабло: $88718
ТС -->
|
ТС
Цитата:
Сообщение от chubaka
А ты уверен что на этом программа зависает ? Какие ошибки выводит программа ?
|
Ошибок нет,она просто не выходит из цикла.Т.е. предположим,что заранее знаем размер письма.И для полной скачки письма требуется n итераций.Если цикл банально брэйком
PHP код:
if($i=$n) {break;}
прервать на последней итерации,то всё нормально.Если не рассчитать размер письма,то на n+1 итерации скрипт будет висеть и ничего не делать,не выходя из цикла.
P.s.сорри,если путано объясняю-не спал давно)
|
|
|
10.07.2009, 07:11
|
#6
|
Member
Регистрация: 21.08.2008
Сообщений: 32
Бабло: $1695
|
попробуй читать размер после retr 1.
там в ответе в первой строчке будет
+OK 1111 octets
Код:
fputs($pop_conn,"RETR 1\r\n");
$size = fgets($pop_conn);
if (preg_match("!\+OK (\d+) octets!",$size,$p)) {
$size = $p[1];
$readed = 0;
while (!feof($pop_conn)) {
$buffer = fgets($pop_conn, 4096);
echo $buffer;
$readed += strlen($buffer);
if ($readed >= $size) {
break;
}
}
}
|
|
|
10.07.2009, 07:22
|
#7
|
Senior Member
Регистрация: 02.12.2008
Сообщений: 1,031
Бабло: $88718
ТС -->
|
ТС
Цитата:
Сообщение от Splinter
попробуй читать размер после retr 1.
там в ответе в первой строчке будет
+OK 1111 octets
Код:
fputs($pop_conn,"RETR 1\r\n");
$size = fgets($pop_conn);
if (preg_match("!\+OK (\d+) octets!",$size,$p)) {
$size = $p[1];
$readed = 0;
while (!feof($pop_conn)) {
$buffer = fgets($pop_conn, 4096);
echo $buffer;
$readed += strlen($buffer);
if ($readed >= $size) {
break;
}
}
}
|
Так он у меня вообще ничего не выводит,но походу копать надо в эту сторону.Спасибо всем за помощь,пойду ковыряться)
|
|
|
10.07.2009, 07:47
|
#8
|
Member
Регистрация: 21.08.2008
Сообщений: 32
Бабло: $1695
|
Еще можно определять конец письма.
Там в конце всегда идет пустая строка и потом просто "." (точка) это 100% конец письма.
|
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
|