[php] filepointer wordt niet afgesloten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    $buffer = "";
    $fp = fsockopen("test.domein.nl", 80, $errno, $errstr, 1);
    if (!$fp)
    {
        return("Geen connectie mogelijk.");
    }
    else
    {
        fputs($fp, "$de_request");
        while (!feof($fp))
        {       
            $buffer = fgets($fp, 4526);         
            echo $buffer;
        }      
        fclose($fp);
    }
    echo "klaar";


Ik gooi hier een GET request heen en krijg dan een HEADER en XML data terug. Het vreemde is dat die XML data opeens afgekapt wordt en het script maar door blijft lopen terwijl hij verder niks meer echo'd. Het lijkt net alsof hij die $fp nog openhoudt. Zie ik iets doms over het hoofd? "klaar" echood hij dus nooit.


Als ik die feof() eruit haal, dan laat hij netjes een regeltje zien en zegt hij klaar. Zou hij het einde van de stream op de een of andere manier niet kunnen herkennen?

Ik las dit op php.net:
Just a note to everyone who is using fsockopen and fread / fgets for a HTTP connection.

Unless you specify "Connection: Close" in your headers you will need to wait for the socket to time out before feof($streamPointer) to return true.

This has wasted 2 days of my time, grr!
Dat staat dus niet in de header en ik kan die niet aanpassen. Is er geen andere manier om de verbinding te closen? Als ik toch niks meer binnenkrijg, dan zou je toch een commando kunnen geven oid?

[ Voor 60% gewijzigd door Verwijderd op 27-01-2004 17:15 ]


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Je hebt twee opties: Connection: Close toevoegen als header in je request, of HTTP/1.1 vervangen door HTTP/1.0.
Bedenk dat je in het tweede geval waarschijnlijk zondigt tegen de RFC's. (als je een "Host: ..." specificeert.)

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je kunt toch kijken of je alles al binnen hebt? Moet je even door de html RFC bladeren

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb ook gekeken of ik wat binnen kreeg. Als ik in de $buffer="\r\n\r\n" inlas, dan deed ik fclose(). Helaas sluit hij de connectie nog steeds niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Je moet kijken naar de Content-Length header... en dan als je zoveel data binnen hebt de connectie dicht gooien
of net zoals kvdveer zei, wil soms een Connection: Close ook wel helpen.
Een http/1.1 sturen is volgens mij niet optimaal omdat het dan kan zijn dat de server het compressed terug stuurt, maar dat weet ik niet 100% zeker...

offtopic:
Je had ergens anders ook al een post over problemen met http protocol... dus zou het niet makkelijk zijn als je ff daar iets over leest...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
YES, Connection: Close deed het. Heel erg bedankt he

offtopic:
Blaatschaap, dit is wel een heel ander onderwerp, daarom.
Pagina: 1