kostenloser Webspace werbefrei: lima-city


Webdokument aufrufen und in Variable speichern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ttobsen

    Kostenloser Webspace von ttobsen

    ttobsen hat kostenlosen Webspace.

    Hi Leute

    Gibt es eine M?glichkeit mit PHP (wird es bestimmt geben :wink:) um zum Beispiele diese Textdatei:

    http://ttobsen.lima-city.de/text.txt

    Also eine Funktion die den Inhalt dieser Datei (die liegt nat?rlich auf einem anderen Server als das PHP Script) in meinem Script in eine Variable speichert.

    Vielen Dank.

    Gru? Tobi
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Die Funktion gibt es. Sie hei?t fsockopen(). Ich dachte, du w?rdest sie schon kennen.

    http://de.php.net/manual/de/function.fsockopen.php

    Allerdings reicht die Funktion alleine nicht. Du musst zus?tzlich noch einen HTTP-Request an die externe "Seite" schicken und die Antwort (mit der enthaltenen Text-Datei) holen.

    Wenn die PHP-Installation einen URL-Wrapper f?r fopen() unterst?tzt, kannst du auch die gew?hnlichen Datei-Funktionen von PHP verwenden:

    $text = file_get_contents('url');
  4. Autor dieses Themas

    ttobsen

    Kostenloser Webspace von ttobsen

    ttobsen hat kostenlosen Webspace.

    alopex schrieb:
    Die Funktion gibt es. Sie hei?t fsockopen(). Ich dachte, du w?rdest sie schon kennen.


    Hmm dachte ich mir schon, allerdings hab ich gehofft das es wieder mal so ne "eine-Funktion-l?st-alle-Probleme" Funtkion gibt, wie das bei PHP so ?blich ist.

    Naja ich mach mich dann dochmal an FSockOpen ran und wenn ich dazu noch Fragen hab meld ich mich.

    Gru? Tobi
  5. Soweit ich wei?, stehen in den User-Contributions zur fsockopen-Manual-Seite eine Menge Informationen, die helfen, mit der Funktion klar zu kommen. Wenn das nicht reicht, kannst du dir ja mal mein Anwendungsbeispiel-Script anschauen:

    http://alopex.pyrokar.lima-city.de/srccodelist/index.php?name=fsockopen_x

    Nicht besonders toll kommentiert, aber wenn die richtigen Werte in die Variablen eingetragen werden, dann k?nnte das Script dir helfen.

    Ich wollte schon lange mal ein Tutorial (oder so was ?hnliches) dazu schreiben, aber da ich selbst die Funktion noch nicht gebraucht habe, bin ich einfach zu faul dazu.
  6. Autor dieses Themas

    ttobsen

    Kostenloser Webspace von ttobsen

    ttobsen hat kostenlosen Webspace.

    sodelle

    Ich habe das mal jetzt so da stehen.
    <?php
    $fp = fsockopen ("elpra.de", 80, $errno, $errstr, 30);
    if (!$fp)
    {
       echo "$errstr ($errno)<br />\n";
    }
    else
    {
       fputs($fp, "GET /vipergb/showbanwords.php HTTP/1.0\r\n\r\n");
       fputs($fp, "Host: elpra.de\n");
       fputs($fp, "Connection: Keep-Alive\n");
       while (!feof($fp))
       {
           echo fgets($fp);
       }
       fclose($fp);
    }
    ?>


    Also seh ich den Ablauf des momentanen Scriptes richtig:

    - fsockopen macht die Verbindung zu meiner Webseite
    - Falls Verbindung erstellt wurde beginnt mit fputs die Anfrage nach dem index Dokument
    - while Schleife beginnt und h?rt erst auf wenn das Ende der Anfragen-Antwort erreicht ist.
    - In der Schleife werden die Daten der Antwort gelesen (immer 128byte weise oder bis ein Zeilenumbruch erfolgt).
    - Verbindung wird geschlossen

    Seh ich das so korrekt? Wenn ja bleibt die Frage:

    Warum erhalte ich als R?ckgabe:


    HTTP/1.1 200 OK
    Date: Fri, 30 Dec 2005 18:30:19 GMT
    Server: Apache/2.0.48 (Linux/SuSE)
    X-Powered-By: PHP/4.3.7
    Connection: close
    Content-Type: text/html


    Aber ich verstehe nicht warum nicht die Webseite mitgeliefert wird. Ich erhalte nur die gequoteten informationen. Hier mal der Link zum Script:

    http://ttobsen.lima-city.de/text.php

    Vielen Dank.

    Gru? Tobi



    Beitrag ge?ndert am 30.12.2005 19:43 von ttobsen
  7. c*********c

    Aber ich verstehe nicht warum nicht die Webseite mitgeliefert wird. Ich erhalte nur die gequoteten informationen.


    Der restliche HTML-Code wird auch mitgeliefert - er wurde nur vom Browser interpretiert.

    Des Weiteren wird lediglich der erste Teil ("GET / HTTP/1.0\r\n\r\n") vom Webserver abgearbeitet, da der Server beim ersten Auftreten von "\r\n\r\n" denkt, dass die Anfrage schon beendet sei.

    Dies beeintr?chtigt nicht die Lauff?higkeit Deines Scripts; jedoch ist der weitere Versand von Angaben unn?tig.

    Anstelle des "GET / HTTP/1.1\r\n\r\n" k?nnte auch "GET / HTTP/1.1\r\nHost: www.elpra.de\r\n\r\n" stehen. HTTP/1.1 bietet gegen?ber HTTP/1.0 einige Vorteile. Siehe dazu http://de.wikipedia.org/wiki/Http#Protokollversionen

    Beitrag ge?ndert am 30.12.2005 19:53 von compactdisc

  8. ... Also seh ich den Ablauf des momentanen Scriptes richtig:

    - fsockopen macht die Verbindung zu meiner Webseite
    - Falls Verbindung erstellt wurde beginnt mit fputs die Anfrage nach dem index Dokument
    - while Schleife beginnt und h?rt erst auf wenn das Ende der Anfragen-Antwort erreicht ist.
    - In der Schleife werden die Daten der Antwort gelesen (immer 128byte weise oder bis ein Zeilenumbruch erfolgt).
    - Verbindung wird geschlossen

    Seh ich das so korrekt? Wenn ja bleibt die Frage:

    Warum erhalte ich als R?ckgabe:


    HTTP/1.1 200 OK
    Date: Fri, 30 Dec 2005 18:30:19 GMT
    Server: Apache/2.0.48 (Linux/SuSE)
    X-Powered-By: PHP/4.3.7
    Connection: close
    Content-Type: text/html


    Aber ich verstehe nicht warum nicht die Webseite mitgeliefert wird. Ich erhalte nur die gequoteten informationen. Hier mal der Link zum Script:

    http://ttobsen.lima-city.de/text.php


    Der Link n?tzt mir aber etwas wenig. Er zeigt ja nur das Ergebnis. :biggrin:

    Das ist da Problem bei Lima: Au?er compactdisc und meinereiner ist keiner online, der mit dieser Funktion halbwegs umgehen kann.

    fsockopen sagt dem Betriebssystem nur, dass es eine Verbindung vorbereiten soll (vereinfacht ausgedr?ckt).

    Mit fputs() (oder fwrite()) schickst du einen HTTP-Request. Damit sagst dem "entfernten" Server, was du willst (eine Seite holen) und was du kannst (Dateiformate, Sprachen usw.).

    Mit fgets() (oder fread()) holst du die Server-Antwort. Die besteht aus zwei Teilen:
    1. Der HTTP-Antwort-Header:
    Steht hier "HTTP/1.1 200 OK", dann hast du die Seite bereits erhalten.

    2. Der "Body" oder die angeforderte Datei (wenn vorhanden).

    Header und Body sind durch eine Leerzeile (zwei Zeilenumbr?che) getrennt.

    Wenn ich die Antwort deines Servers richtig interpretiere, liefert er die Seite gest?ckelt ("chunked") aus. So eine Seite muss man etwas anders holen. Hab ich noch nie gemacht. Aber such mal auf
    http://de.php.net/manual/de/function.fsockopen.php
    nach "chunked". Dort m?sste was dazu stehen.

    Ich w?rde auch einige Zeilen weglassen:

    <?php
    $fp = fsockopen ("elpra.de", 80, $errno, $errstr, 30);
    if (!$fp)
    {
       echo "$errstr ($errno)<br />\n";
    }
    else
    {
       fputs($fp, "GET / HTTP/1.0\r\n\r\n");
       fputs($fp, "Accept: text/html, */*");
       fputs($fp, "Host: elpra.de");
       fputs($fp, "Connection: Keep-Alive");
       while (!feof($fp))
       {
           echo fgets($fp);
       }
       fclose($fp);
    }
    ?>



    Beitrag ge?ndert am 30.12.2005 19:53 von alopex
  9. Autor dieses Themas

    ttobsen

    Kostenloser Webspace von ttobsen

    ttobsen hat kostenlosen Webspace.

    Ok habs jetzt.

    Ich hab immer in Alopex codebeispiel im auskommentierten Bereich geschaut (obwohl die Warnung dr?ber steht *klopf klopf*).

    Gru? Tobi

    Der Code mit dems jetzt klappt:
    <?php
    $fp = fsockopen ("elpra.de", 80, $errno, $errstr, 30);
    if (!$fp)
    {
       echo "$errstr ($errno)<br />\n";
    }
    else
    {
       fputs($fp, "GET /vipergb/showbanwords.php HTTP/1.0\n");
       fputs($fp, "Host: elpra.de\n");
       fputs($fp, "\n");
       while (!feof($fp))
       {
           echo fgets($fp);
       }
       fclose($fp);
    }
    ?>


    Beitrag ge?ndert am 30.12.2005 19:54 von ttobsen
  10. Wie schon gesagt: Ich wollte das schon immer mal richtig verst?ndlich erkl?ren, war aber bisher zu faul dazu, das zu machen. Es gibt daf?r momentan keinen richtigen Anreiz f?r mich -- 150 Lima-Gulden sind mir zu wenig.^^

    Aber darf ich mal eine Zusatzfrage stellen? Wenn du die Zeit misst, die vom Aufruf von fsockopen() bis zum Abruf der Seite vergehen, wie viele Sekunden (oder was auch immer) vergehen da? Ich habe das Problem, dass das Script da ca. 20 Sekunden lang nichts tut, bevor es loslegt. Und ich glaube, compactdisc hatte das gleiche Ph?nomen beobachtet.
  11. Autor dieses Themas

    ttobsen

    Kostenloser Webspace von ttobsen

    ttobsen hat kostenlosen Webspace.

    Also bei mir geht das flott. Ich Klicke drauf und die Seite wird dargestellt.

    Allerdings wenn ich ein PHP Script aufrufe, das eine mysql Verbindung erst aufbaut, ben?tige ich auch so ca. 20 Sekunden, was wohl eher beim mysql Server liegen wird.

    Gints jetzt eigentlich ne M?glichkeit wie ich den Header aus der Ausgabe wegbekomme oder mu? ich das von Hand bearbeiten?

    Gru? Tobi

    Beitrag ge?ndert am 30.12.2005 20:07 von ttobsen
  12. Nein, mit MySQL hab ich nichts gemacht.

    Den Header vom Body trennen. Wenn beides als String in einer Variablen hast, kannst du das ganz brutal so machen:

    $http // deine empfangenen Daten

    list($header, $html) = preg_split('/(\r\n\r\n|\n\n)/', $http, 2);

    M?sste so funktionieren, ist aber nicht getestet.

  13. Autor dieses Themas

    ttobsen

    Kostenloser Webspace von ttobsen

    ttobsen hat kostenlosen Webspace.

    lol, warum ist denn das so brutal? :wink:

    Hat funktioniert :)

    Endlich kann mein G?stebuchspamschutz verbessert werden *freude*

    Gru? Tobi

  14. lol, warum ist denn das so brutal? :wink:

    Hat funktioniert :)

    Endlich kann mein G?stebuchspamschutz verbessert werden *freude*


    Das ist "brutal", weil irgendwer bestimmt wieder denkt: "Jetzt strapaziert der wieder die Regul?ren Ausdr?cke"! Und es geht auch irgendwie anders (oder "intelligenter"). Aber f?r mich ist es die einfachste L?sung.

    G?stebuchspamschutz? Mit Abholen von Seiten von fremden Webservern -- faszinierend!
  15. Autor dieses Themas

    ttobsen

    Kostenloser Webspace von ttobsen

    ttobsen hat kostenlosen Webspace.

    alopex schrieb:
    G?stebuchspamschutz? Mit Abholen von Seiten von fremden Webservern -- faszinierend!


    Stimmt, wenn man nicht genau wei? worums geht ist das faszinierend ;)

    Das soll eine sichere L?sung sein, die Spameintr?ge anderen mitzuteilen, ohne das die Zugriff auf meine Datenbank brauchen. Und da dachte ich hab ich so ne sichere Methode ohne DB, PAsswort, etc. mitteilen zu m?ssen.

    Gru? Tobi
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!