socket_read() endlosschleife

Alles, was PHP betrifft, kann hier besprochen werden.

socket_read() endlosschleife

Postby max_payne » 15. May 2006 16:14

hallo
bin schon am verzweifeln:

code:
...

$in = genhttpHeader($_GET["server"], "GET", $_GET["path"] . $_GET["file"]);
$out = '';


socket_write ($socket, $in, strlen ($in));
while(($x = socket_read($socket, 1024,PHP_BINARY_READ)) != "")
{
$out .= $x;
echo $x."<br/>";
}

...
das socket_read bringt die gesamte seite zum hängen, manchmal gehts vllt nach 40 sekunden weiter, manchmal nicht

was bereits probiert wurde: != "" auf != FALSE geändert, brachte auch nix

bitte helft mir

ps: socket wurde richtig geöffnet, usw...
max_payne
 
Posts: 10
Joined: 07. May 2006 20:56

Postby thorsin » 15. May 2006 16:55

hmmm, ohne mich jetzt prinzipiell weiter damit befasst zu haben, aber ist es nicht so, dass er dann auf input vom socket wartet, bis der da ist? das würde auch den timeout erklären

edit: schätze du musst ihm ein terminierendes zeichen geben... != False geht da glaub ich nicht... versuch mal sowas wie !=$myEOI wobei du $myEOI EndOfInput als zeichenkette vorher definierst und an den socket schickst wenn er schließen soll
User avatar
thorsin
 
Posts: 136
Joined: 05. March 2006 20:39

Postby max_payne » 15. May 2006 17:26

naja das problem ist, dass ich damit eine webseite aufrufen will(request an den server per write senden, und dann bekomm ich die response zurück)...nur womit endet die response? \r\n\r\n ??
max_payne
 
Posts: 10
Joined: 07. May 2006 20:56

Postby thorsin » 15. May 2006 17:44

http://de.wikipedia.org/wiki/Hypertext_ ... r_Protocol

ka. wie da ein EOF signalisiert wird... zur not kann man erstmal mit dem header arbeiten, oder aber mit der dateigröße oder sowas
User avatar
thorsin
 
Posts: 136
Joined: 05. March 2006 20:39

Postby thorsin » 15. May 2006 17:45

LOL
doch klar hab ich ne ahnung...
EOF ist
Code: Select all
</html>
User avatar
thorsin
 
Posts: 136
Joined: 05. March 2006 20:39

Postby thorsin » 15. May 2006 17:51

mal ne andere frage:
macht der server kein close, wenn die datei übertragen wurde?
dann könntest du nämlich nur while ($x) machen
User avatar
thorsin
 
Posts: 136
Joined: 05. March 2006 20:39

Postby max_payne » 15. May 2006 19:27

thorsin wrote:mal ne andere frage:
macht der server kein close, wenn die datei übertragen wurde?
dann könntest du nämlich nur while ($x) machen

nope, funzt ned

also derzeit isses so gelöst: content-length auslesen usw.
einige server schreiben aber kein content-length!? was kann man da machen?
max_payne
 
Posts: 10
Joined: 07. May 2006 20:56

Postby thorsin » 15. May 2006 19:37

also mal so gesagt: warum machst du das so umständlich?
wenn du nen linux-server benutzt mach doch einfach ein exec('wget filename'); und dann liest du die datei mit fopen ein, einfacher als mit sockets...
User avatar
thorsin
 
Posts: 136
Joined: 05. March 2006 20:39

Postby max_payne » 15. May 2006 19:43

thorsin wrote:also mal so gesagt: warum machst du das so umständlich?
wenn du nen linux-server benutzt mach doch einfach ein exec('wget filename'); und dann liest du die datei mit fopen ein, einfacher als mit sockets...

also ich bekomme einen request, (evtl. mit post-daten) den sende ich an den server und krieg die response zurück.

geht das mit dem?

achja ich arbeite mit xampp für win
max_payne
 
Posts: 10
Joined: 07. May 2006 20:56

Postby thorsin » 15. May 2006 23:05

vergiss meine letzte antwort einfach wenn du windows benutzt
User avatar
thorsin
 
Posts: 136
Joined: 05. March 2006 20:39

Postby thorsin » 15. May 2006 23:10

Code: Select all
$in = "HEAD / HTTP/1.0\r\n\r\n";
$out = '';

echo "Einen HTTP HEAD Request senden ...";
socket_write ($socket, $in, strlen ($in));
echo "OK.\n";

echo "Die Antwort lesen:\n\n";
while ($out = socket_read ($socket, 2048)) {
    echo $out;
}

echo "Den Socket schliessen ...";
socket_close ($socket);
echo "OK.\n\n";

hier gefunden
User avatar
thorsin
 
Posts: 136
Joined: 05. March 2006 20:39

Postby max_payne » 16. May 2006 06:07

danke, aber ich hab die lösung bereits selber gefunden:
man keine keep-alive-connection aufbauen, sondern man muss eine close-connection(http 1.0 aubauen)
max_payne
 
Posts: 10
Joined: 07. May 2006 20:56


Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest