Achim Schrepfer: Ausgabe von Skripten speichern (Cache-Eigenbau)

Hallo Forum,

ich arbeite z.Zt. an einem Redaktionstool für Webseiten. Da dieses einigermassen komplex ist und für den Aufbau einer Seite zig Datenbankabfragen benötigt, möchte ich die generierten HTML-Seiten fest abspeichern.

Meine Frage ist nun, wie ich die komplette Ausgabe des PHP-Skriptes, so wie sie am Browser ankommt als Datei auf meine Serverplatte bekomme. Hat jemand einen Tipp für mich?

Viele Grüße und schon mal danke für`s lesen,
Achim

  1. Huhu Achim

    http://www.php.net/manual/de/function.ob-start.php
    das könnte Dir helfen.

    Hier noch ein kleiner Tipp, da ich (Irgendwie scheinen ja alle gerade an CMS-Systemen zu stricken ;-) ) etwas in der Art[1] auch  mache; damit ich keine Probleme mit der UID bekomme (die hatte ich nämlich vorher, vor allem wenn PHP im SafeMode läuft) hat sich bei mir folgende Vorgehensweise bewährt:

    Beim Neuanlegen einer Datei, bzw. aktualisieren derselben, auf dem Server prüft das PHP-Skript ob die Datei schon vorhanden ist.
    Wenn nicht, legt das Script die Datei per FTP an. Damit hat die automatisch erzeugte Datei die gleiche UID wie die "normal" per FTP aufgespielten.

    Viele Grüße

    lulu

    [1] per PHP erzeugte Seiten auf dem Server speichern

    1. Moin!

      Beim Neuanlegen einer Datei, bzw. aktualisieren derselben, auf dem Server prüft das PHP-Skript ob die Datei schon vorhanden ist.
      Wenn nicht, legt das Script die Datei per FTP an. Damit hat die automatisch erzeugte Datei die gleiche UID wie die "normal" per FTP aufgespielten.

      Würdest du dazu mal Beispielcode posten. Das interessiert mich nämlich auch. :)

      Danke!

      - Sven Rautenberg

      1. Huhu Sven

        anbei ein kleines Code-Schnipsel, ich hoffe es funktioniert so, da ich es eben zusammengecopypasted habe.
        Ist mit_ohne_error_handling!
        Eigentlich kann man ja in PHP auch mit fopen direkt auf einem remote Server Dateien anlegen (sagt man), bei meinen div. Domains ging das allerdings nur bei einer Installation , deshalb lade ich jetzt einfach eine Datei mit_ohne_Inhalt hoch, das klappt immer, vorausgesetzt natürlich das in der PHP-Installation die ftp-Funktionen enabled sind.

        Bei Verzeichnissen mache ich das dann entsprechend mit ftp_mkdir.

        Viele Grüße

        lulu

        // FTP-Stuff

        define(cROOT_DIR,'my_server_path/');
        define(cBASE_DIR,'my_web_path/');

        define(cFTP_USER,'myname');  # FTP-User
        define(cFTP_PWD,'mysecret');  # FTP-PWD
        define(cFTP_HOST,'www.mysite.de');    # FTP-HOST
        define(cFTP_DUMMY,cROOT_DIR.'ftp_dummy.txt');

        function ftp_fopen($path,$handle,$opt='0755')
        {
         $upload = ftp_put($handle,$path, cFTP_DUMMY, FTP_BINARY);
         if($upload){
          $cmd="CHMOD $opt $path";
          ftp_site($handle, $cmd);
         }
        }

        function ftp_connection()
        {
         $handle=ftp_connect(cFTP_HOST);
         $r=ftp_login($handle,cFTP_USER,cFTP_PWD);
         return $handle;
        }

        //ftp-connect
        $ftp_handle=ftp_connection();

        [...]

        if(!file_exists(cROOT_DIR.$outfile)){
         ## Datei per FTP anlegen, da sonst Ärger mit den Rechten
         $fp=ftp_fopen(cBASE_DIR.$outfile,$ftp_handle,'0777');
        }

    2. Huhu Achim

      Kuckuck! ;-)

      http://www.php.net/manual/de/function.ob-start.php
      das könnte Dir helfen.

      Danke. Das hat geholfen. Möchte fast behaupten, daß das genau das ist wonach ich gesucht habe *freuwieeinkleineskindzuweinachten*.

      Beim Neuanlegen einer Datei, bzw. aktualisieren derselben, auf dem Server prüft das PHP-Skript ob die Datei schon vorhanden ist.
      Wenn nicht, legt das Script die Datei per FTP an. Damit hat die automatisch erzeugte Datei die gleiche UID wie die "normal" per FTP aufgespielten.

      Damit dürfte ich keine Probleme haben, da die gespeichtere Datei nicht direkte via HTTP ausgegeben wird, sondern durch ein PHP-Skript läuft. Das System soll nämlich eine Art Hybridbetrieb zulassen. Das bedeutet, daß zwar das Skript zur Ausgabe des dyn. Contents aufgerufen wird, es aber nur zur Verarbeitung kommt, wenn nicht schon eine Cachedatei auf der Platte liegt. Ist das der Fall, liest das Skript nur fix die Datei ein und gibt sie aus.

      Viele Grüße,
      Achim