Hallo Leute, ich möchte folgende Webseite http://85.178.122.5/ auslesen und in eine Textdatei schreiben. Das Problem ist, der Server ist hinter dem Router (Fritzbox) und fopen funzt hier nicht :-( . Mit fsockopen('http://85.178.122.5/';, 80, $errno, $error, 5); bekomme ich auch ein false. Wie würdet Ihr das lösen? Ich komme mehr aus dem C Bereich und bin in der Netzwerkgeschichte noch recht frisch. Bin für alles mehr als dankbar. Wünsche noch einen schönen Sonntag.
spontan würd ich auf safe-mode von php tippen... spuckt der irgendwas in $error bzw $errno aus??? 73
Moment, von wo aus möchtest du das überhaupt machen? Ich kann die Seite mit einem normalen Browser garnicht öffnen! -> Timeout! Also könnte ich zB auch gar kein Script schreiben, das das tut! Versuchst du das daheim in einem privaten Netz? Wie kommst du dann zu der IP Adresse?
Hi Leute, danke erst einmal für eure Zeit. Ich habe ein Webserver in meinem Netzwerk der mir die Temperatur zb auf einer HTML Seite liefert. Über Port Forwarding kann ich jederzeit über wetterstation.mine.nu mir meine Daten anzeigen lassen (außer ich mache den Router aus oder Dyn funktioniert mal wieder nicht richtig) Nun zu meinem Problem: Ich hatte mir folgendes überlegt zum testen und fgets schreibt nichts in die Datei. $datei = "test.txt"; $filestream = fsockopen("http://wetterstation.mine.nu/", 80, $errno, $error); if(!filestream){ echo "Fehler: $errno"; echo "Fehlerbeschreibung: $error"; } else echo "IP geöffnet!"; $filestream = fopen("http://wetterstation.mine.nu/","r"); if(!$filestream) echo "Fehler beim öffnen!<br>"; else echo "Webseite geöffnet!<br>"; while(!feof($filestream)) { $resultat = fgets($filestream); $a = fopen($datei,"a"); fwrite($a,$resultat); } fclose($a); fclose($filestream); $groesse = filesize("$datei"); if($groesse==0) echo "Es wurde nix in $datei gespeichert!"; else echo "Es wurden $groesse Bytes in $datei gespeichert!"; Da ich Neuling in PHP bin habe ich dan recherchiert und es liegt wohl am Router und man muss wohl so sich "als Browser" ausgeben fp = fsockopen("http://wetterstation.mine.nu/", 80, &$errno, &$errstr, 30); if ($fp) { fputs($fp, "GET ".wetterstation.mine.nu." HTTP/1.0\n\n"); while (!feof($fp)) { $reply = fgets($fp); } fclose($fp); } echo $reply; Aber warum steht nichts in reply drin??????? Habe ich bei der Browseranfrage Fehler gemacht? Habe auch von socket_set_blocking gelesen hat das was damit zu tun? Vielen Dank!
du must dem server schon sagen, dass du die daten haben willst.. sonst bekommst auch nix.. daher das GET.. aber der passt irgendqwie nicht ganz... "GET ".wetterstation.mine.nu." HTTP/1.0\n\n" sollte doch "GET / HTTP/1.0\n\n" sein oder seh ich da was falsch?? naja auf jedenfall gibts da doch eine funktion die dir das direkt machen kann... http_get schau doch einfach mal unter den http-functions auf php.net nach... http://at.php.net/manual/de/ref.http.php 73
Hallo, fsockopen() ist eine Funktion auf ziemlich tiefer Ebene - Die kann sowas wie http:// nicht interpretieren. Du musst den Hostname oder die IP-Adresse direkt übergeben, zum Beispiel so: fsockopen("mikrocontroller.net", ...); Wohin sie sich in deiner Version verbindet, weiß ich nicht. Gruß, Folke
Hi Leute, danke erst einmal für Eure Zeit und Euer Verständnis. Aber vielleicht habe ich mich unklar ausgedrückt und möchte mein Problem nochmal präzise ausdrücken: Ich habe einen Mikrocontroller (MSP430) und einen Lancontroller (der mir eine HTML Seite generiert (ich habe ihm vorher meine C Daten übergeben)). Beide sind auf einem Entwicklungsboard (http://www.olimex.com/dev/msp-easyweb3.html) verbaut. Das Board verfügt über einen TCP Stack und ist über eine IP ansprechbar. Wenn ich nun im LAN diese IP über meinen Browser aufrufe erscheint die Webseite. Nun habe ich in meiner FritzBox das Portforwarding oder Portfreigabe aktiviert, damit meine ich alle Anfragen von außen auf mein aktuelle IP bzw. auf wetterstation.mine.nu (habe ich mir dyndns.org eingerichtet) werden über Port80 an Port80 weitergeleitet und an die Interne IP 192.168.xx.xx von meinem Board gesendet und man kann sich die HTML Seite anschauen. Nun möchte ich die Daten von dieser Seite auslesen und auf einem Richtigen Server meiner UNI speichern. Das auslesen (parsen) einer HTML Seite ist so kein Problem gewesen (zb eine Testseite auf dem Server der UNI usw.) Leider funktioniert die Variante hier nicht (mit fopen) Nun zu meinem aktuellen Problem: Ich hatte mir folgendes überlegt zum testen aber fgets schreibt nichts in die Datei. $datei = "test.txt"; $filestream = fsockopen("http://wetterstation.mine.nu/", 80, $errno, $error); if(!filestream){ echo "Fehler: $errno"; echo "Fehlerbeschreibung: $error"; } else echo "IP geöffnet!"; $filestream = fopen("http://wetterstation.mine.nu/","r"); if(!$filestream) echo "Fehler beim öffnen!<br>"; else echo "Webseite geöffnet!<br>"; while(!feof($filestream)) { $resultat = fgets($filestream); $a = fopen($datei,"a"); fwrite($a,$resultat); } fclose($a); fclose($filestream); $groesse = filesize("$datei"); if($groesse==0) echo "Es wurde nix in $datei gespeichert!"; else echo "Es wurden $groesse Bytes in $datei gespeichert!"; Da ich Neuling in PHP bin habe ich dan recherchiert und es liegt wohl am Router und man muss wohl so sich "als Browser" ausgeben fp = fsockopen("wetterstation.mine.nu", 80, &$errno, &$errstr, 30); if ($fp) { fputs($fp, "GET ".wetterstation.mine.nu." HTTP/1.0\n\n"); while (!feof($fp)) { $reply = fgets($fp); } fclose($fp); } echo $reply; Aber warum steht nichts in $reply drin, das ist doch unlogisch, oder? Wo liegt den das Problem? Wie würde ein Profi die Geschichte lösen? Wichtig ist auch ich kann mit dem Board nichts senden oder als Datei speichern, nur ein HTML Seite generieren und muss diese auslesen. Also Danke noch mal an alle die mir helfen wollen. Vielen Dank!
Aber in PHP sind es doch auch nur 3 Zeilen.
1 | print http_get( "www.mikrocontroller.net" ); |
oder
1 | print http_get( "http://wetterstation.mine.nu/" ); |
Das wars schon.
das hat nix mit deinem router zu tun!!! tuts per normalen browser? wenn ja ists nicht der router! > Da ich Neuling in PHP bin habe ich dan recherchiert und es liegt wohl am > Router und man muss wohl so sich "als Browser" ausgeben > > fp = fsockopen("wetterstation.mine.nu", 80, &$errno, &$errstr, > 30); > if ($fp) > { > fputs($fp, "GET ".wetterstation.mine.nu." HTTP/1.0\n\n"); der GET kann so nicht passen! mach wie oben beschrieben einen http_get das tut genau das was du willst! 73
Hallo Leute, leider hat bishetzt noch nichts den gewünschten Erfolg gehabt, ich habe jetzt unter http://85.178.80.78/ einfach eine HTML Seite die ich generiere. Ich habe alle Spielereien weggelassen und gebe reinen Text aus. Die CURL Extension hatte da auch nicht mehr Erfolg :-( (wurde mir unter http://selfphp.de/forum/showthread.php?t=15782&page=3 empfohlen) Wer hat noch ein Idee? Warum sollte ich eine Seite nicht parsen können wenn ich Sie aber öffnen kann? Hier der aktuelle PHP Code und er öffnet auch die IP! <?php unlink("test.txt"); $datei = "test.txt"; $filestream = fsockopen("http://wetterstation.mine.nu/", 80, $errno, $error); if(!filestream){ echo "Fehler: $errno"; echo "Fehlerbeschreibung: $error"; } else echo "IP geöffnet!"; fputs($filestream, "GET / HTTP/1.0\r\n\r\n"); while(!feof($filestream)) { echo fgets($filestream); /* $resultat = fgets($filestream); $a = fopen($datei,"a"); fwrite($a,$resultat); */ } //fclose($a); fclose($filestream); ?> Vielen Dank an Euch für Eure Hilfe. PS: Falls die IP nicht mehr erreichbar ist hat sich mein Board (EaysyWeb3) aufgehangen.
Änder diese Zeile:
1 | $filestream = fsockopen("http://wetterstation.mine.nu/", 80, $errno, |
in das hier:
1 | $filestream = fsockopen("wetterstation.mine.nu", 80, $errno, $error); |
dann gehts.
C:\Dokumente und Einstellungen\Feadi\Desktop>c:\php5\php.exe huhu.php IP ge÷ffnet!<html> <head> <title>Daten Wetterstation</title> </head> <body> Versorgungsspannung in Volt * 100: <br>Chiptemperatur in Grad * 10: </body> </html> Das hier ist die Ausgabe bei mir.
Sorry das hatte ich schon geändert, bin nur in der Datei verrutscht :-( . Aber es geht bei mir immer noch nicht. Wenn es bei Dir geht, denn kann doch nur der Server auf dem das Script liegt, schuld sein! Ich komme nur die Ausgabe "IP geöffnet!". Dabb nuss ich mich mal an den Admin wenden. Danke an alle die mir geholfen haben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.