WatzLaff: CMS-Ausgabe als HTML-Datei speichern

Hallo!

Ich möchte eine CMS-Ausgabe als HTML-Datei auf dem Server speichern und verwende diesen Code:

<?php  
  
ob_start();  
include("index.php?article=162");  
$filecontent = ob_get_contents();  
ob_end_clean();  
  
$f = fopen('ausgabe.htm', 'w');  
fputs($f, $filecontent);  
fclose($f);  
  
?>

Hier bekomme ich die Fehlermeldung: "... failed to open stream: No such file or directory ...". Lasse ich aber den Searchpart weg und schreibe nur include("index.php"), funktioniert es ohne Probleme. Kompletter statt relativer Pfad bringt keine Abhilfe, require statt include auch nicht.

Phpinfo sagt mir: allow_url_include = off. Ob es daran liegt? Safe_mode ist off. Welche anderen Möglichkeiten gibt es, eine dynamische Ausgabe einzulesen oder vielleicht direkt als HTML-Datei abzuspeichern?

Danke für Hinweise!

  1. Hi,

    include("index.php?article=162");

    Eine Datei mit diesem Namen wird im Dateisystem deines Server wohl kaum existieren.

    Hier bekomme ich die Fehlermeldung: "... failed to open stream: No such file or directory ...".

    Siehste.

    Lasse ich aber den Searchpart weg und schreibe nur include("index.php"), funktioniert es ohne Probleme.

    Logisch, das ist ja auch der korrekte Name der Datei.

    Phpinfo sagt mir: allow_url_include = off. Ob es daran liegt?

    Nein, schließlich ist überhaupt kein HTTP im Spiel.

    Wenn du willst, das im per include eingebundenen Script eine Variable zur Verfügung steht - dann weise ihr einfach im einbindenden Script vorher einen Wert zu.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hallo,

      Phpinfo sagt mir: allow_url_include = off. Ob es daran liegt?

      Nein, schließlich ist überhaupt kein HTTP im Spiel.

      Ich dachte, man könnte auch URLs includieren. Aber ich stochere noch ziemlich im Nebel, das stimmt.

      Wenn du willst, das im per include eingebundenen Script eine Variable zur Verfügung steht - dann weise ihr einfach im einbindenden Script vorher einen Wert zu.

      Ich möchte die CMS-Ausgabe als Datei speichern und dann auf einen anderen Server laden, auf dem kein CMS zur Verfügung steht.

      Aber das Problem ist inzwischen gelöst, danke auch dir für den Denkanstoß.

      WatzLaff

      1. Hi,

        Phpinfo sagt mir: allow_url_include = off. Ob es daran liegt?

        Nein, schließlich ist überhaupt kein HTTP im Spiel.

        Ich dachte, man könnte auch URLs includieren.

        Kann man, ja.
        Aber du hast keine URL als Parameter angegeben, sondern einen ungültigen Dateinamen.

        Mach dir den Unterschied zwischen include aus dem Dateisystem und über HTTP klar, den Martin schon angesprochen hatte.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Hallöchen,

    include("index.php?article=162");
    Hier bekomme ich die Fehlermeldung: "... failed to open stream: No such file or directory ...".

    natürlich, weil das Fragezeichen in Dateinamen nicht zulässig ist. Was versprichst du dir bei einem *include* von diesem Anhängsel? Ist dir möglicherweise der Unterschied zwischen Datei und HTTP-Ressource nicht klar?

    Phpinfo sagt mir: allow_url_include = off.

    Dann hast du also auch keine Chance, die Ausgabe des Scripts mit include einzubinden. Aber das ist sowieso eine sehr merkwürdige Art, an die Ausgabe eines Scripts gelangen zu wollen. Ich würde es eher mit file_get_contents() versuchen - vorausgesetzt, allow_url_fopen ist wenigstens gesetzt. Und auch dann natürlich nicht als Datei, sondern als HTTP-Ressource ansprechen.

    So long,
     Martin

    --
    Irgendwann in grauer Vorzeit benutzte einer unserer prähistorischen Vorfahren ein Schimpfwort anstelle der Keule.
    Die Zivilisation hatte begonnen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo,

      Phpinfo sagt mir: allow_url_include = off.

      Dann hast du also auch keine Chance, die Ausgabe des Scripts mit include einzubinden. Aber das ist sowieso eine sehr merkwürdige Art, an die Ausgabe eines Scripts gelangen zu wollen. Ich würde es eher mit file_get_contents() versuchen - vorausgesetzt, allow_url_fopen ist wenigstens gesetzt.

      Ja, file_get_contents() ist gesetzt, danke für den Tipp!

      Mein Code ist jetzt:

      <?php  
        
      $ausgabe = file_get_contents('http://example.com/index.php?article_id=21');  
        
      $f = fopen('ausgabe.htm', 'w');  
      fputs($f, $ausgabe);  
      fclose($f);  
        
      ?>
      

      ... und funktioniert! Ist es doch so einfach, dabei hatte ich vorher so lange gesucht.

      Besten Dank!

      WatzLaff

  3. Hello,

    Ich möchte eine CMS-Ausgabe als HTML-Datei auf dem Server speichern und verwende diesen Code:

    <?php

    ob_start();
    include("index.php?article=162");
    $filecontent = ob_get_contents();
    ob_end_clean();

    $f = fopen('ausgabe.htm', 'w');
    fputs($f, $filecontent);
    fclose($f);

    ?>

      
    Du könntest mal versuchen, das ob\_start() und das ob\_get\_clean() auf zwei Files zu verteilen, die Du dann in der Konfiguration einträgst:  
      
    <http://de3.php.net/manual/de/ini.core.php#ini.auto-prepend-file>  
      
    Dann könntest Du die Ressource weiterhin ganz normal über den HTTP aufrufen und im Hintergrund würden die Dateien geschrieben werden. Achte auf vernünftige Dateinamen und -Pfade.  
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
    1. Hallo,

      Du könntest mal versuchen, das ob_start() und das ob_get_clean() auf zwei Files zu verteilen, die Du dann in der Konfiguration einträgst:

      http://de3.php.net/manual/de/ini.core.php#ini.auto-prepend-file

      Dann könntest Du die Ressource weiterhin ganz normal über den HTTP aufrufen und im Hintergrund würden die Dateien geschrieben werden. Achte auf vernünftige Dateinamen und -Pfade.

      Das habe ich mir jetzt noch angesehen, aber nicht ganz verstanden. Es scheint aber auf jeden Fall komplizierter zu sein, ohne einen für mich erkennbaren Vorteil zu bieten.

      Danke aber trotzdem.

      WatzLaff

      1. Hello,

        Du könntest mal versuchen, das ob_start() und das ob_get_clean() auf zwei Files zu verteilen, die Du dann in der Konfiguration einträgst:

        http://de3.php.net/manual/de/ini.core.php#ini.auto-prepend-file

        Dann könntest Du die Ressource weiterhin ganz normal über den HTTP aufrufen und im Hintergrund würden die Dateien geschrieben werden. Achte auf vernünftige Dateinamen und -Pfade.

        Das habe ich mir jetzt noch angesehen, aber nicht ganz verstanden. Es scheint aber auf jeden Fall komplizierter zu sein, ohne einen für mich erkennbaren Vorteil zu bieten.

        Was hast Du denn nicht verstanden?
        Die Beschreibung der beiden Konfigurationseinstellungen besagt doch eigentlich genau, was mit den Files passiert. Sie werden an geeigenten Stellen (ganz am Anfang und ganz am Ende) in das auszuführende PHP-Script eingebunden.

        Der Vorteil liegt auf der Hand: Du musst in deine Ressourcen in keiner Weise eingreifen. Die Einbindung kann per .htaccess geschehen.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de