mikrocontroller.net

Forum: PC-Programmierung PHP Probleme


Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Hans Wilhelm (hans-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spontan würd ich auf safe-mode von php tippen...


spuckt der irgendwas in $error bzw $errno aus???

73

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Gerlmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss es denn unbedingt C sein?

Mit C# wären es 3 Codezeilen :)

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ähm .. net C ... :) PHP natürlich :)

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber in PHP sind es doch auch nur 3 Zeilen.
print http_get( "www.mikrocontroller.net" );
oder
print http_get( "http://wetterstation.mine.nu/" );
Das wars schon.

Autor: Hans Wilhelm (hans-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Patti (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Änder diese Zeile:
$filestream = fsockopen("http://wetterstation.mine.nu/", 80, $errno,


in das hier:
$filestream = fsockopen("wetterstation.mine.nu", 80, $errno, $error);

dann gehts.

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.