PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Minirobot per PHP - aber ein Problem...



Andy09
01-09-2003, 14:58
Hi Leute,

habe aus dem Linuxforum gerade den Tipp bekommen das ich mit meinem kleinen Problemchen hier bessere Erfolgschancen haben könnte ;)

Also als erstes, ich bin eigentlich eher ein eingefleischter ASP-Programmierer und steige gerade in PHP so HALBWEGS durch. Jetzt hab ich ein Problem. Bevor ein Link geöffnet werden soll, soll mein Skript prüfen ob es diese Seite überhaupt noch gibt. Das habe ich so realisiert erstmal...

<?php
$fp = fsockopen( "$domain", 80, &$errno, &$errdesc, 5 );
if ( ! $fp )
{
die ( "Keine Verbindung zu $domain:\nFehler: $errno\nBeschreibung: $errdesc\n" );
}
$anfrage = "GET /$seite HTTP/1.0\r\n";
$anfrage .= "Host: $domain\r\n";
$anfrage .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
$anfrage .= "Accept-Language: de\r\n";
$anfrage .= "Referer: $referer \n\r\n";;

fputs ( $fp, $anfrage );
socket_set_timeout($fp, 5);
$head = fread($fp, 1024);
print "$head";
?>
Das Problem ist nur, ich kann sowohl die Methode GET als auch die Methode HEAD nehmen, es gibt scheinbar ein paar Server die senden absolut null rüber, weder ein Error, noch die angeforderte Seite. Jetzt hab ich da so die \r\n-Sachen im Verdacht, bin mir aber nicht sicher. Kann mir bitte einer helfen?!

Ich kann nur sagen WAS passiert: Bei den meisten Server wird mir brav der HEADER bzw. die ersten 1024 Zeichen rübergegeben, was mir ja schon mal ausreicht. Aber bei einigen wird mir absolut NULL zurückgegeben, fsockopen funzt einwandfrei, aber fread würde bis Weihnachten stehen bleiben bzw. bis natürlich der PHP-Timeout anschlägt.

Bitte helft mir mal auf die Sprünge ich hab auch nichts in meinen Büchern so richtig finden können :( ;)

Gruß
Andy

Gaert
01-09-2003, 15:22
Hallo!

Wenn´s nur darum geht die Verfügbarkeit des Servers zu prüfen, dann reicht ja das öffnen der Socketverbindung eigentlich schon aus.
Wenn du überprüfen willst ob die Seite existiert, dann ist HEAD wohl besser geeignet als GET - weniger overhead durch Datentransfer.

Diese Zeile hier sieht mir nicht ganz richtig aus:
$anfrage .= "Referer: $referer \n\r\n";;

Ansonsten kannste dir das hier mal anschauen:
http://selfforum.teamone.de/archiv/2002/10/25571/

Gruß,

Gaert

Andy09
01-09-2003, 21:04
Hallo Gaert,

vielen Dank für deine Antwort. Ich hatte vorher auch die HEAD Methode
gehabt und später zum testen auf GET gesetzt, was leider das gleiche
Ergebnis hatte.

Ooops, ein doppeltes ; drin, danke ;)

Ich hab mich durch den ganzen Beitrag durchgelesen, ich bin Schritt für Schritt sein Skript durchgegangen, nichts, ausser ein abbruptes Ende des Threads mit der Bemerkung Ach ja vergaß: Es funktioniert jetzt... :D

Jetzt bin ich genau so schlau wie zuvor auch :(

Hat vielleicht noch jemand eine Idee warum ich von manchen Seiten als HEADER gar keine Antwort erhalte!?!?!

Gruß
Andy

Gaert
01-09-2003, 22:04
Original geschrieben von Andy09

Ooops, ein doppeltes ; drin, danke ;)

Ich meinte auch noch das \n das zuviel war... zu deinem Problem fällt mir auf die schnelle jetzt leider auch nichts mehr ein.

Andy09
02-09-2003, 00:22
Original geschrieben von Gaert
Ich meinte auch noch das \n das zuviel war...

Hi,

im Gegenteil, eigentlich fehlte noch das \r denn der Header erfordert eine leere Leerzeile damit der Server weiss das die Header-Übergabe bzw. Anfrage abgeschlossen ist ;)


zu deinem Problem fällt mir auf die schnelle jetzt leider auch nichts mehr ein
schade - mir auch nicht mehr :(
vielleicht hab ich ja noch Glück und jemand fällt noch was ein der über diesen Thread stolpert ;) Ich probiere mal solange weiter mein Glück...

Gruß
Andy

sagi
02-09-2003, 17:25
Hallo.

Ich bin mir da jetzt nicht ganz sicher, aber ich faende es logischer die Zeilenschaltung vor dem Ruecklauf zu senden. Vielleicht wird das sonst als Leerzeile angesehen?

mfg

c.