Mathew: Text aus externer Datei auslesen

Hallo,

wie kann ich mit Hilfe von php Text (HTML-Code) aus einer externen Datei einlesen und in einem HTML-Dokument darstellen? Das kann ich natürlich leicht nachlesen, aber ich suche eher etwas fertiges, irgendwelche Scripte, mit denen man das bewerkstelligen kann. Kann mir da jemand behilflich sein?

mr

  1. Hallo Mathew,

    wie kann ich mit Hilfe von php Text (HTML-Code) aus einer externen Datei einlesen und in einem HTML-Dokument darstellen?

    was willt du machen? den html-code einer Datei mit einer php-Datei ausgeben? vielleicht hilft dir das:
    $filename = "datei.html";
    $fd = fopen ($filename, "r"); //http://www.php.net/manual/de/function.fopen.php
    $contents = fread ($fd, filesize($filename)); //http://www.php.net/manual/de/function.fread.php
    fclose ($fd); //http://www.php.net/manual/de/function.fclose.php
    echo htmlspecialchars($contents); //http://www.php.net/manual/de/function.htmlspecialchars.php

    ungetestet :-) - oder meinst du was anderes?

    Grüße aus Nürnberg
    Tobias

    1. Hallo Tobias K.,

      $filename = "datei.html";
      $fd = fopen ($filename, "r"); //http://www.php.net/manual/de/function.fopen.php
      $contents = fread ($fd, filesize($filename)); //http://www.php.net/manual/de/function.fread.php
      fclose ($fd); //http://www.php.net/manual/de/function.fclose.php
      echo htmlspecialchars($contents); //http://www.php.net/manual/de/function.htmlspecialchars.php

      wie wär's mit echo htmlspecialchars(implode("", file($filename))); ? ;)

      Gruß,
      dimde

      1. Moin Moin !

        wie wär's mit echo htmlspecialchars(implode("", file($filename))); ? ;)

        Du meinst, weil es genau so wenig auf Fehler prüft, aber dafür in eine Zeile paßt ? *SCNR*

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
        1. Hallo Alexander Foken,

          wie wär's mit echo htmlspecialchars(implode("", file($filename))); ? ;)

          Du meinst, weil es genau so wenig auf Fehler prüft, aber dafür in eine Zeile paßt ? *SCNR*

          Jep, sieht viel eleganter aus, wenn das dann in ner Error Log steht :)

          Gruß,
          dimde

      2. Hallo dimde,

        wie wär's mit echo htmlspecialchars(implode("", file($filename))); ? ;)

        das geht natürlich auch, nur muss man vor beide Beispiele noch ein <pre> (bzw. dannach halt </pre>) schreiben, sonst sieht das ganze ziemlich wüst aus :-)

        Grüße aus Nürnberg
        Tobias

  2. Hallo Mathew,

    wie kann ich mit Hilfe von php Text (HTML-Code) aus einer externen Datei einlesen und in einem HTML-Dokument darstellen? Das kann ich natürlich leicht nachlesen, aber ich suche eher etwas fertiges, irgendwelche Scripte, mit denen man das bewerkstelligen kann. Kann mir da jemand behilflich sein?

    dazu gibt es eine eigene PHP Funktion. Wie sie heißt und wie man sie
    verwendet kannst du - wie du ja selbst sagst - leicht nachlesen
    (Kleiner Tipp: Du willst Text _einfügen_).

    Beachte aber auch die zahlreichen Sicherheitsrisiken die durch
    allzu leichtsinnige Verwendung dieser Funktion entstehen können
    und wie man sie umgehen kann[1].

    [1] Suche dazu hier im Archiv und lies dir die Kommentare zu dieser
        Funktion im PHP Manual, sowie das Kapitel "Security" durch.

    Gruß,
    dimde

  3. Hallo Tobias,

    welch Zufall. Das habe ich gerade ausprobiert:

    <?PHP  #### getpage.php ####

    $datei = "http://192.168.101.1/seminare/index.html";
    $fh = fopen($datei,"r");
    if(!$fh) die("hat nicht geklappt");

    $site="";
    $i=0;
    while (($block=fread($fh,512)) and ($i++ < 20))  // was ist hier mit der Größenangabe ?
    {
      $site.=$block;
    }

    fclose($fh);
    echo $site;
    ?>

    Das muss natürlich nun noch weiterentwickelt werden. Denn was ist, wenn dort ein Frameset drinsteht?

    Das will ich gerade noch ersetzen. Und außerdem sollte man der Funktion dann auch noch einen Parameter übergeben könne, um jede beliebige EXTERNE Seite lesen zu können. Die Internen sollte man tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    1. Hi Tom,
      Mail bekommen? ;-)

      welch Zufall. Das habe ich gerade ausprobiert:

      <?PHP  #### getpage.php ####

      $datei = "http://192.168.101.1/seminare/index.html";
      $fh = fopen($datei,"r");
      if(!$fh) die("hat nicht geklappt");

      $site="";
      $i=0;
      while (($block=fread($fh,512)) and ($i++ < 20))  // was ist hier mit der Größenangabe ?
      {
        $site.=$block;
      }

      fclose($fh);
      echo $site;
      ?>

      Das muss natürlich nun noch weiterentwickelt werden. Denn was ist, wenn dort ein Frameset drinsteht?

      Das will ich gerade noch ersetzen. Und außerdem sollte man der Funktion dann auch noch einen Parameter übergeben könne, um jede beliebige EXTERNE Seite lesen zu können. Die Internen sollte man tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.

      Warum? Solange man die Dateien nur Lesen kann, kann doch nichts passieren. Es sei denn, du machst in deinem Script Dummheiten...

      Fabian

      1. Hallo Fabian,

        Das will ich gerade noch ersetzen. Und außerdem sollte man der Funktion dann auch noch einen Parameter übergeben könne, um jede beliebige EXTERNE Seite lesen zu können. Die Internen sollte man tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.
        Warum? Solange man die Dateien nur Lesen kann, kann doch nichts passieren. Es sei denn, du machst in deinem Script Dummheiten...

        Habe ich da eben verkehrt gedacht? wenn ich getpage.php?page=/etc/... schreibe, dann könntest Du Dir damit jede Datei auf dem Server anzeigen lassen, auf die das Script Zugriff hat. Das muss man unterbinden. Oder?

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
        1. Hi

          Das will ich gerade noch ersetzen. Und außerdem sollte man der Funktion dann auch noch einen Parameter übergeben könne, um jede beliebige EXTERNE Seite lesen zu können. Die Internen sollte man tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.
          Warum? Solange man die Dateien nur Lesen kann, kann doch nichts passieren. Es sei denn, du machst in deinem Script Dummheiten...
          Habe ich da eben verkehrt gedacht? wenn ich getpage.php?page=/etc/... schreibe, dann könntest Du Dir damit jede Datei auf dem Server anzeigen lassen, auf die das Script Zugriff hat. Das muss man unterbinden. Oder?

          Nö, ich greife immer über "http://".$_GET['page'] zu. Da kommt der arme Parameter an keine Systemdaten ran. Und selbst wenn: Auf /etc/, /lib/, /bin/ etc. hat das Script (bei mir) eh keine Rechte, was soll also passieren?

          Fabian

          1. Hi Fabian,

            Nö, ich greife immer über "http://".$_GET['page'] zu. Da kommt der arme Parameter an keine Systemdaten ran. Und selbst wenn: Auf /etc/, /lib/, /bin/ etc. hat das Script (bei mir) eh keine Rechte, was soll also passieren?

            Könntest du Dein Script bitte posten?

            mr

            1. Hi

              Nö, ich greife immer über "http://".$_GET['page'] zu. Da kommt der arme Parameter an keine Systemdaten ran. Und selbst wenn: Auf /etc/, /lib/, /bin/ etc. hat das Script (bei mir) eh keine Rechte, was soll also passieren?
              Könntest du Dein Script bitte posten?

              --
              <?PHP  #### js_test.php ####

              $fh = fopen("http://".$_GET['page'],"r");
              if(!$fh)die("Seite nicht erreichbar (oder sicher genug, nicht auslesbar zu sein...)!");
              $site = fread($fh,800000);  // Ich nehme an, dass 800000 groß genug ist? ;-)
              fclose($fh);

              echo $site;
              ?>
              --

              Fabian

              1. Hi

                <?PHP  #### js_test.php ####

                $fh = fopen("http://".$_GET['page'],"r");
                if(!$fh)die("Seite nicht erreichbar (oder sicher genug, nicht auslesbar zu sein...)!");
                $site = fread($fh,800000);  // Ich nehme an, dass 800000 groß genug ist? ;-)
                fclose($fh);

                echo $site;
                ?>

                Hat dieses Script jetzt noch Sicherheitslücken?

                mr

                1. Hi

                  »»[...]
                  Hat dieses Script jetzt noch Sicherheitslücken?

                  Nur, wenn du es wieder änderst ;-)
                  Nein, im Ernst: Das Script ist jetzt so angelegt, dass es eher einen Fehler gibt, als das vitale Dateien ausgelesen werden können, zumindest nicht auf dem lokalen System. Sicherheitslücken in externen Scripten schließt das natürlich nicht...

                  Fabian

              2. Hi

                <?PHP  #### js_test.php ####

                $fh = fopen("http://".$_GET['page'],"r");

                Was muss ich hier verändern, wenn ich z.B. die Seite "www.website.de/dir/index1.htm" auslesen möchte?

                mr

                1. Hallo Mathew,

                  <?PHP  #### js_test.php ####

                  $fh = fopen("http://".$_GET['page'],"r");

                  Was muss ich hier verändern, wenn ich z.B. die Seite "www.website.de/dir/index1.htm" auslesen möchte?

                  Du musst das script nut aufrufen

                  js_test.php?page=www.website.de/dir/index1.htm

                  Ich bin mir aber im Moment nicht sicher, ob die slashes nicht ersetzt werden müssen gegen %2F

                  Dann müsstest Du in dein Frame aufnehmen:

                  <frame src="js_test.php?page=www.website.de%2Fdie%2Findex1.htm">

                  So müsste das dann klappen, wenn das Script im Verzeichnis vom Frameset liegt.

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    2. Hallo Thomas,

      Das will ich gerade noch ersetzen. Und außerdem sollte man der
      Funktion dann auch noch einen Parameter übergeben könne, um jede
      beliebige EXTERNE Seite lesen zu können. Die Internen sollte man
      tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.

      Was meinst du hier genau mit externen und internen Dateien (innerhalb/außerhalb der Domain?)?

      mr

      1. Hallo Mathew,

        Was meinst du hier genau mit externen und internen Dateien (innerhalb/außerhalb der Domain?)?

        Ja, alle Dateien, die auf DEinem Server leigen, lassen sich ja ohne http:// erreichen und damit könnte man dann, wenn das Script der in $_GET["page"] übergebenen Dateinamen einfach so übernehmen würde, alle Dateien auf Deinem Server aufmachen, auf die das Script (der wwwrun) Zugriff haben. Das dürften mehr sein, als Die lieb ist.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.