Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB58.7670
BTC/USD0.0000
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 10.07.2009, 05:23   #1
krokodile
Senior Member
 
Аватар для krokodile
 
Регистрация: 02.12.2008
Адрес: S-Pb
Сообщений: 1,029
Бабло: $88298
Отправить сообщение для krokodile с помощью ICQ Отправить сообщение для krokodile с помощью Skype™
По умолчанию Остановить fgets

Есть у меня такой скриптец скачивания писем по POP3:
PHP код:
$pop_conn fsockopen("ssl://pop.gmail.com"995,$errno$errstr2);
$code=fgets($pop_conn,1024);
echo 
"$code<br>";

fputs($pop_conn,"USER username\r\n");
$codefgets($pop_conn,1024);
echo 
"$code<br>";

fputs($pop_conn,"PASS pass\r\n");
$codefgets($pop_conn,1024);
echo 
"$code<br>";

fputs($pop_conn,"RETR 1\r\n");
while (!
feof($pop_conn)) {
    
$buffer fgets($pop_conn4096);
    echo 
$buffer;

Работает нормально,но,сука, fgets не видит окончания писем и не выходит из цикла.Как написать по человечески-помогите плз)

Последний раз редактировалось krokodile; 10.07.2009 в 06:15.
krokodile вне форума  
Старый 10.07.2009, 06:06   #2
SsangYong
Юниор
 
Регистрация: 03.10.2007
Сообщений: 25
Бабло: $6705
По умолчанию

PHP код:
while(!feof($pop_conn))
{
  
$code=fgets($pop_conn,1024);
  echo 
"$code<br>";

вроде так
SsangYong вне форума  
Старый 10.07.2009, 06:14   #3
krokodile
Senior Member
 
Аватар для krokodile
 
Регистрация: 02.12.2008
Адрес: S-Pb
Сообщений: 1,029
Бабло: $88298
ТС -->
Отправить сообщение для krokodile с помощью ICQ Отправить сообщение для krokodile с помощью Skype™
автор темы ТС По умолчанию

Цитата:
Сообщение от SsangYong Посмотреть сообщение
вроде так
Не,не помогает-всё равно не останавливается Чувствую,что туплю совсем жёстко,но ничего на ум не приходит.
krokodile вне форума  
Старый 10.07.2009, 06:19   #4
chubaka
Ебланнед
 
Регистрация: 06.06.2007
Сообщений: 154
Бабло: $5450
По умолчанию

А ты уверен что на этом программа зависает ? Какие ошибки выводит программа ?
__________________
Бан по мотивам этого топика - http://www.gofuckbiz.com/showthread.php?t=33220
chubaka вне форума  
Старый 10.07.2009, 06:51   #5
krokodile
Senior Member
 
Аватар для krokodile
 
Регистрация: 02.12.2008
Адрес: S-Pb
Сообщений: 1,029
Бабло: $88298
ТС -->
Отправить сообщение для krokodile с помощью ICQ Отправить сообщение для krokodile с помощью Skype™
автор темы ТС По умолчанию

Цитата:
Сообщение от chubaka Посмотреть сообщение
А ты уверен что на этом программа зависает ? Какие ошибки выводит программа ?
Ошибок нет,она просто не выходит из цикла.Т.е. предположим,что заранее знаем размер письма.И для полной скачки письма требуется n итераций.Если цикл банально брэйком
PHP код:
 if($i=$n)
{break;} 
прервать на последней итерации,то всё нормально.Если не рассчитать размер письма,то на n+1 итерации скрипт будет висеть и ничего не делать,не выходя из цикла.
P.s.сорри,если путано объясняю-не спал давно)
krokodile вне форума  
Старый 10.07.2009, 07:11   #6
Splinter
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;
    	}
	} 
}
Splinter вне форума  
Старый 10.07.2009, 07:22   #7
krokodile
Senior Member
 
Аватар для krokodile
 
Регистрация: 02.12.2008
Адрес: S-Pb
Сообщений: 1,029
Бабло: $88298
ТС -->
Отправить сообщение для krokodile с помощью ICQ Отправить сообщение для krokodile с помощью Skype™
автор темы ТС По умолчанию

Цитата:
Сообщение от 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;
    	}
	} 
}
Так он у меня вообще ничего не выводит,но походу копать надо в эту сторону.Спасибо всем за помощь,пойду ковыряться)
krokodile вне форума  
Старый 10.07.2009, 07:47   #8
Splinter
Member
 
Регистрация: 21.08.2008
Сообщений: 32
Бабло: $1695
По умолчанию

Еще можно определять конец письма.

Там в конце всегда идет пустая строка и потом просто "." (точка) это 100% конец письма.
Splinter вне форума