Harald: Dateien einlesen mit PHP

Hallo!

Ich würde gerne eine Datei von der Website meines Freundes in meine Seite einbinden => ich möchte sie mit PHP einlesen, substr, str_replace, ... anwenden und da sergebnis in meine Website einbauen. Ich kann auch alles, bis auf das Seite einlesen und wieder schliesen (falls man das machen muss)

mfg
Harald

  1. Hallo Harald,

    Ich würde gerne eine Datei von der Website meines Freundes in meine Seite einbinden => ich möchte sie mit PHP einlesen, substr, str_replace, ... anwenden und da sergebnis in meine Website einbauen. Ich kann auch alles, bis auf das Seite einlesen und wieder schliesen (falls man das machen muss)

    Falls allow_url_fopen gesetzt ist, ist das kein Problem, du kannst die Seite dann einfach mit fopen() öffnen. Ansonsten musst du selber einen HTTP-Request an den Server absetzen und die Datein runterladen.

    Schöne Grüße,

    Johannes

    --
    ie:% fl:( br:< va:) ls:[ fo:) rl:) n4:& ss:| de:] js:| ch:} sh:) mo:} zu:)
    1. Hallo!

      Falls allow_url_fopen gesetzt ist, ist das kein Problem, du kannst die Seite dann einfach mit fopen() öffnen. Ansonsten musst du selber einen HTTP-Request an den Server absetzen und die Datein runterladen.

      allow_url_fopen ist gesetzt, aber bei diesem Code erhält die var nur die ersten ca. 35 Zeichen, warum?

      $filename = "text.html" ;
        $dataFile = fopen( $filename, "r" ) ;
        if ( $dataFile )
        {
         $txt = fgets($dataFile, 1000000);
         fclose($dataFile);
        }
        else
        {
         echo( "fopen failed" ) ;
        }

      mfg
      Harald

      1. Hallo Harald,

        allow_url_fopen ist gesetzt, aber bei diesem Code erhält die var nur die ersten ca. 35 Zeichen, warum?

        Meine Glaskugel sagt mir dazu: Wahrscheinlich liest du genau die erste Zeile?

        if ( $dataFile )
          {
           $txt = fgets($dataFile, 1000000);
           fclose($dataFile);
          }

        Dir ist schon klar, was fgets() tut? Es liest Zeichen bis zum nächsten Zeilenende, maximal jedoch die im zweiten Parameter angegebene Anzahl.

        In deinem Fall wäre also anstatt der Kombination fopen()/fgets() eher file_get_contents() zu empfehlen. Oder -falls dir diese Funktion nicht zur Verfügung steht- Zeile für Zeile immer wieder fgets() aufrufen, bis feof() true liefert.

        So long,

        Martin

        1. hoppla, ich hab schon lang nichts mehr mit dem fgets gemacht, da ich normalerweise MySQL nutze ...

          was kann ich machen, damit ich das Ergebnis der fget-Schleife weiterverarbeiten kann?
          => $txt = str_replace('[nureinBsp]', '[dasErgebnis]', $txt);

          mfg
          Harald

      2. Hallo Harald,

        allow_url_fopen ist gesetzt, aber bei diesem Code erhält die var nur die ersten ca. 35 Zeichen, warum?

        $filename = "text.html" ;
          $dataFile = fopen( $filename, "r" ) ;
          if ( $dataFile )
          {
           $txt = fgets($dataFile, 1000000);
           fclose($dataFile);
          }
          else
          {
           echo( "fopen failed" ) ;
          }

        fgets() liest immer nur eine Zeile ein. Dein Code müsste also so aussehen:

          
        $filename = "text.html";  
        $txt = "";  
        if ($dataFile = fopen($filename, "r")) {  
            while (!feof($dataFile)) {  
                $txt .= fgets($dataFile);  
            }  
        } else {  
            echo("fopen failed");  
        }  
        
        

        Noch einfach geht es allerdings, mit file_get_contents(). Diese Funktion ist zwar erst ab PHP 4.3.0 verfügbar aber inzwischen sollte auf den meisten Servern eine neu genuge Version laufen.

        Schöne Grüße,

        Johannes

        --
        ie:% fl:( br:< va:) ls:[ fo:) rl:) n4:& ss:| de:] js:| ch:} sh:) mo:} zu:)
      3. Hello,

        allow_url_fopen ist gesetzt, aber bei diesem Code erhält die var nur die ersten ca. 35 Zeichen, warum?

        Das liegt einerseits an fgets(), so wie die Anderen es schon erwähnt haben.
        Aber auch mit fread() kommst Du nicht unbeingt weiter, da die Socket-Verbindung, die sich in diesem Wrapper-Zugriff versteckt, ggf. ins Stocken kommt, und PHP das leider nicht wirklich transparent abhandelt, sondern einfach aufhört mit dem Lesen.

        Es ist also auch bei fread() immer noch notwendig, die entfernten Dateien (HTTP-Ressourcen) über eine Schleife auszulesen.

        Harzliche Grüße vom Berg
        esst mehr http://www.harte-harzer.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau