[PHP] fsockopen -> feof oneindige loop

Pagina: 1
Acties:

  • muis|IA
  • Registratie: Oktober 2001
  • Laatst online: 18-11-2022
ik probeer hier scrippie te maken om mail te lezen vanaf pop3 server.
nu heb ik dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$fp = fsockopen("pop3.bladiebla.nl", 110, $error, $errstr, 30);
if ($fp) {
  fputs($fp, "USER kees\r\n");
  fputs($fp, "PASS wachtwoord\r\n");

  fputs($fp, "RETR 1\r\n");

  while (!feof($fp)) {
    print fgets($fp, 128);
  }

  fclose($fp)
}


ik weet dat er een mail op de server staat en die krijg ik ook wel te zien op het scherm alleen de loop eindigt niet,
iemand idee hoe dat kan? :?

Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als je mail binnen is misschien nog fputs("QUIT\r\n") doen ?
Er zal tot die tijd iig geen feof gegeven worden vermoed ik.

  • sjokki
  • Registratie: Juli 2002
  • Niet online
code:
1
2
3
4
C:    RETR 1
S:    +OK 120 octets
S:    <the POP3 server sends message 1>
S:    .

Het bericht zou ik met fread() lezen. De twee andere gedeeltes van de respons met fgets().

  • muis|IA
  • Registratie: Oktober 2001
  • Laatst online: 18-11-2022
heb het nu ook met fread geprobeerd als:
PHP:
1
2
3
4
  while (!feof($fp)) {
    print fgets($fp, 128)."<BR>";
    flush();
  }

ik zie nu dus die hele mail over het beeld verschijnen,
alleen blijft m'n script in die loop hangen doordat (vermoed ik) die feof() niet gesnapt wordt

Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je krijgt geen eof...
Heel simpel.

Pas als je QUIT zegt tegen de server krijg je een eof (van de server uit dan iig).
Als je mailtje binnen is, moet je dus gewoon QUIT roepen tegen de server, als het goed is eindigt je mailtje met bijv een enkele . op een lege lijn en zodra je dat hebt kan je stoppen met lezen en dus evt QUIT roepen

  • muis|IA
  • Registratie: Oktober 2001
  • Laatst online: 18-11-2022
eej perfect :)

zo werkt het idd wel:

PHP:
1
2
3
4
5
6
while (!feof($fp)) {
  $buffer = fgets($fp, 128);
  if ($buffer == ".\r\n") fputs($fp, "QUIT\r\n");
  print $buffer."<BR>";
  flush(); 
}

Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)

Pagina: 1