fgets() -> Aulesen der Socket Daten dauert *zu lange*

silv

Grünschnabel
Guten Abend erstmal :)

Das folgende Skript liest SMTP Extensions (bzw. erstmal alles so wie es der Server ausspuckt :) ) aus.
Problem an der Sache ist, es dauert meiner Meinung nach viel zu lange, und was noch seltsamer ist, es braucht bei einer Anfrage am lokalen Mailserver exakt 30 Sekunden, auf dem Remoteserver 60 Sekunden Oo

Hab alles aufs wesentliche gekürzt..
PHP:
<?php
$socket = fsockopen("localhost", 25, $errno, $errorstr, 20);

echo time()."<br>";

if($socket)
{
	fputs($socket, "EHLO localhost\r\n");
	$line = fgets($socket, 128);
	
	while(strpos($line, "\r\n"))
	{
	   $msg[] = $line;	  
	   $line = fgets($socket, 128);
	   if(empty($line))
	   {
	   	break;
	   }
	} 	
}

for($i=0; $i<sizeof($msg)+1; $i++)
{
   echo "$msg[$i]<br>";
} 

echo time()."<br>";

fputs($socket, "QUIT\r\n");
?>

Da beide Anfragen immer die selbe Zeit benötigen, beschleicht mich das Gefühl dass es mayb an irgendwelchen Settings liegen könnte :suspekt:
 
Problem gelöst :)

Die Verzögerung kam dadurch zustande, da bei der Auflistung der Extensions das letzte Element durch den fehlenden Bindestrich *gekennzeichnet* wird, was dem
PHP:
strpos($line, "\r\n") bzw. ereg("\r\n", $line)
wohl nicht geschmeckt hat (wäre interessant warum).

Einfach das
PHP:
if(empty($line))
{
    break;
}

durch
PHP:
if(substr($line, 3, 1) == " ")
{
    break;
}
ersetzen, und schon klappts wie gewollt :)
 
Zurück