kostenloser Webspace werbefrei: lima-city


Webdokument aufrufen und in Variable speichern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. 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');
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. 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.
  4. 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

  5. ... 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
  6. 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.
  7. 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.


  8. 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!
  9. 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!