jogi: problem mit fgets

Hallo zusammen,

ich schicke Daten an einen Webserver und möchte die Antwort verarbeiten.
Den Script läuft auf meinem rechner unter Apache und PHP5.2 .
Anbindung ist DSL6000.

$fp = fsockopen("ssl://server.com",443,$errstr,$errno);
if(!$fp)
{
    die();
}
else
{
    $file = addslashes($file);
    $data = $file;
    fputs($fp, "POST /webservice/XMLServlet HTTP/1.0\r\n");
    fputs($fp, "Host: server.com\r\n");
    fputs($fp, "Authorization: Basic ".$kennung." \r\n");
    fputs($fp, "Content-length: ". strlen($data) ."\r\n");
    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
    fputs($fp, "Connection: close\r\n\r\n");
    fputs($fp, $data);
}
$xxx = 1;
while(!feof($fp))
{
    echo "Step ".$xxx." : ".date("d.m.Y - H:i:s")."<br>\n";
    $data .= fgets($fp, 2048);
    $xxx++;
}

da das script beim ersten Aufruf sehr lahm ist, habe ich eine Art Debug mit Zeitmarken gemacht.
Dabei fiel auf, dass die meiste Zeit für die While Schleife drauf geht.
Wie man in den Auszügen sieht, wird das Script immer schneller :-)

Ich rufe das Script in einer Minute 4 mal auf.
Beim letzten mal ist das Script sehr schnell.

1 : 06.06.2008 - 11:29:45<br>
2 : 06.06.2008 - 11:30:08<br>
3 : 06.06.2008 - 11:30:08<br>
4 : 06.06.2008 - 11:30:08<br>
5 : 06.06.2008 - 11:30:08<br>
6 : 06.06.2008 - 11:30:08<br>
7 : 06.06.2008 - 11:30:08<br>
8 : 06.06.2008 - 11:30:08<br>
9 : 06.06.2008 - 11:30:08<br>

15 seconds later again

1 : 06.06.2008 - 11:30:58<br>
2 : 06.06.2008 - 11:31:22<br>
3 : 06.06.2008 - 11:31:22<br>
4 : 06.06.2008 - 11:31:22<br>
5 : 06.06.2008 - 11:31:22<br>
6 : 06.06.2008 - 11:31:22<br>
7 : 06.06.2008 - 11:31:22<br>
8 : 06.06.2008 - 11:31:22<br>
9 : 06.06.2008 - 11:31:22<br>

another 15 seconds later
1 : 06.06.2008 - 11:33:01<br>
2 : 06.06.2008 - 11:33:05<br>
3 : 06.06.2008 - 11:33:05<br>
4 : 06.06.2008 - 11:33:05<br>
5 : 06.06.2008 - 11:33:05<br>
6 : 06.06.2008 - 11:33:05<br>
7 : 06.06.2008 - 11:33:05<br>
8 : 06.06.2008 - 11:33:05<br>
9 : 06.06.2008 - 11:33:05<br>

another 15 seconds later
1 : 06.06.2008 - 11:33:28<br>
2 : 06.06.2008 - 11:33:31<br>
3 : 06.06.2008 - 11:33:31<br>
4 : 06.06.2008 - 11:33:31<br>
5 : 06.06.2008 - 11:33:31<br>
6 : 06.06.2008 - 11:33:31<br>
7 : 06.06.2008 - 11:33:31<br>
8 : 06.06.2008 - 11:33:31<br>
9 : 06.06.2008 - 11:33:31<br>
10 : 06.06.2008 - 11:33:31<br>
11 : 06.06.2008 - 11:33:31<br>
12 : 06.06.2008 - 11:33:31<br>
13 : 06.06.2008 - 11:33:31<br>
14 : 06.06.2008 - 11:33:31<br>
15 : 06.06.2008 - 11:33:31<br>
16 : 06.06.2008 - 11:33:31<br>

Man sieht, dass beim ersten fgets am meisten Zeit drauf geht.
Hat jemand ne Idee, warum das so ist ?
Kann ich daran etwas ändern?

bye jogi

  1. Hello,

    while(!feof($fp))
    {
        echo "Step ".$xxx." : ".date("d.m.Y - H:i:s")."<br>\n";
        $data .= fgets($fp, 2048);

    2048 Bytes sind zuviel für eine Schleife. Nimm nur 128
          Irgendwo kann man das auch nachslesen

    Man sieht, dass beim ersten fgets am meisten Zeit drauf geht.
    Hat jemand ne Idee, warum das so ist ?

    Da wird wohl irgendwo ein Cache im Spiel sein?
    Oder liegt es an der Route, die Du trainiert hast?

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de