Problem leży zapewne w samym odczytywaniu. Strumień zachowuje się bardzo podobnie do pliku, więc możliwe, że funkcja odczytująca "brała" za mało znaków. Polecam zastosowanie
feof(). Skrypt został podzielony na dwie części, żeby umożliwić wprowadzenie danych. Nie testowalem go, ale powinien dzialac.
<?php
/*
Podrecznik funkcji:
string FetchMyMail( string $host, string $user, string $pass, string $postfield = "nrwiad" );
--Funkcja za pierwszym wywolaniem (gdy nie ma danych z formularza), wyswietla formularz
z lista wiadomosci (niestety bez tematow, gdyz wymagaloby to odczytania calej wiadomosci),
a nastepnie (gdy podamy dane), zwraca tresc wiadomosci.
Parametr $postfield okresla nazwe pola, z ktorego bierzemy ewentualny numer wiad
omosci
do pobrania.
*/
function FetchMyMail($host,$user,$pass,$postfield="nrwiad")
{
//Uzycie \r\n dla pelnej zgodnosci, nie powinno przeszkadzac
fputs($pol,"USER {$user}\r\n"); fputs($pol,"PASS {$pass}\r\n"); $resp[0
] = fgets($pol,1024
); //pobieramy 1 KB danych i umieszczamy w tablicy kodow odpowiedzi if (substr($resp[0],0,3) !== "+OK") die("Błąd autoryzacji."); //sprawdzamy czy wszystko idzie jak nalezy //WPROWADZENIE DANYCH
if (!isset($_POST[$postfield])) {
$msgtemp = stream_get_contents($pol);
foreach ($msglist as $mlk => $mlv) { if ($mlv == "" || $mlv == " " || $mlv == ".") unset($msglist[$mlk]); } $rstr = "<form action='plik.php' method='POST'>Numer wiadomości do pobrania:<br /><select name='nrwiad'>";
//Linie powyzej mozesz zmienic, nazwe pola przekazujemy jako czwarty parametr funk
cji
foreach ($msglist as $msk => $msv)
{
$mnum = substr($msv,0
,strpos($msv," ")); //wydobywamy liczbe porzadkowa $rstr .= "<option value='{$mnum}'>{$msv}</option>\n";
}
$rstr .= "</select><input type='submit' value='Pobierz!'></form>";
print($rstr); //zamiast print() mozesz dac return, skrypt jest zaprojektowany dla latwosci edycji }
else
{ //LUB ZWRACANIE MAILA
fputs($pol,"RETR {$_POST[$postfield]}\r\n"); $mstr = ""; //ta zmienna bedzie napelniona wiadomoscia
$mstr = stream_get_contents($pol);
return $mstr;
}
/* to ponizej mozesz wyjac z komenta, ale i tak nie robi nic pozytecznego...
fputs($pol,"QUIT\r\n");
fclose($pol); */
}
?>
Mam nadzieję, że wskazówki okażą się pomocne.
A teraz: ilu nawiasów i średników zapomniałem?
EDIT: Zmieniłem trochę ten skrypt, poprzednio wykonanie zajmowało około 30 sekund... dopóki nie
otrzymywaliśmy timeouta. Teraz niestety działa tylko w PHP5. W celu uzyskania kompatybilności trzeba by znaleźć funkcję podobną do stream_get_contents lub napisać własną. Testowane przez matracha, podobno działa.