Hilfe, Hilfäää! PHP-generierten Code als HTML-Datei speichern.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Hilfe, Hilfäää! PHP-generierten Code als HTML-Datei speichern.

    Hallo Leute!
    Ich bin halb verzweifelt! Vor ein paar Wochen habe ich hier im Forum wegen einem bestimmten Problem gefragt und viele gute Hinweise bekommen. Ich habe jetzt alles in Sack und Tüten (nochmal ein förmliches Danke an alle Hilfsbereiten!) aber an einer Sache beiße ich mir seit Tagen die Zähne aus:

    Ich habe ein Formular gebastelt (siehe "Quelle.htm"), das ausgefüllt wird und als Action eine PHP-Seite aufruft ("Ziel.php"), in der das ausgefüllte Formular noch einmal angezeigt wird. Gleichzeitig will ich den von der "Ziel.php" generierten HTML-Code als HTML-Datei speichern, damit ich das ausgefüllte Formular als HTML-File per Mail versenden kann. Der Sinn ist, dass es beim Empfänger optisch 1:1 ankommt. (Und nicht als ASCII-Stapel.)

    Ich bin folgendermaßen vorgegangen:
    Mit fread() lese ich die "Ziel.php" aus und mit fputs() schreibe ich den Inhalt in eine "Test.htm". So weit funzt auch alles, die "Ziel.php" erscheint als ausgefülltes Formular, die "Test.htm" wird auf HD erstellt und das Formular wird darin abgebildet. Aber: Ohne Variablenwerte! Wenn ich jedoch die "Ziel.php" im Browser mit "Speichern unter" als .htm safe, ist der Inhalt in der HTML-Datei drin. Aber wenn ich die "Ziel.php" mit fputs() in ein HTML-File schreibe, fehlen die Werte! Das gibts doch nicht! Was mach ich denn da falsch?? Es muss doch möglich sein, den vom php-Skript generierten HTML-Code in eine HTML-Datei zu schreiben!?? So, als würde man die generierte Seite mit "Datei / Speichern unter" abspeichern...

    Bitte helft mir, ich dreh bald durch!

    Zum Verständnis habe ich die "Quelle.htm" und die "Ziel.php" (mit einem ganz rudimentären Formular) auf den Server geschmissen. Da könnt ihr gucken, wie ich das meine. Ihr findet es hier:

    http://www.highexplosive.de/quelle.htm

    Also das, was nach Klick auf den Abschicken-Button angezeigt wird, soll so 1:1 in eine HTML-Datei geschrieben werden.
    Dazu habe ich folgendes Skript zusammengefummelt (ist jetzt aber nicht mehr drin):

    *************
    <?php

    # Zwei Dateizeiger werden eingerichtet. Einer zum lesen der "ziel.php",
    # einer zum schreiben der "test.htm".
    $zeigerr=fopen("ziel.php","r");
    $zeigerw=fopen("test.htm","w+");

    # Die Größe der "ziel.php" wird ermittelt, weil fread() eine Größenangabe
    # als Parameter erwartet. Anschließend wird der "Read-Zeiger" ausgelesen.
    $size=filesize("ziel.php");
    $ausgelesen=fread($zeigerr, $size);

    # Die ausgelesenen Werte werden in den Write-Zeiger gestopft.
    fputs($zeigerw,$ausgelesen);

    # Beider Zeiger schließen.
    fclose($zeigerr);
    fclose($zeigerw);

    ?>
    *******************

    Hier stimmt doch alles, oder? Das Skript läuft und erstellt auch ordnungsgemäß die Datei "test.htm", aber die Werte werden nicht reingeschrieben. Wat mach ichn falsch??

    Vielen Dank schon mal!
    HE



    Hier noch der Quellcode der beiden Online-Files:

    quelle.htm
    ++++++++++
    <html>
    <head>
    <title>
    Umzugsgutliste - UTM
    </title>
    </head>
    <body bgcolor="#C2C2D6">
    <div align="right"></div>
    <div align="center">
    <form name="form1" method="post" action="ziel.php">
    <div align="center">
    <table width="322" border="0" cellspacing="2" cellpadding="2">
    <tr>
    <td height="16" width="83"><font size="2" face="Arial, Helvetica, sans-serif">Auftraggeber</font><font face="Arial, Helvetica, sans-serif">:</font></td>
    <td height="16" width="346"> <font face="Arial, Helvetica, sans-serif">
    <input type="text" name="auftraggeber" size="40" maxlength="40">
    </font></td>
    </tr>
    </table>
    <p>
    <input type="submit" name="abschicken" value="Formular abschicken">
    </p>
    </div>
    </form>
    </div>
    </body>
    </html>
    ++++++++

    ziel.php
    ++++++++
    <html>
    <head>
    <title>
    Umzugsgutliste - UTM
    </title>
    </head>
    <body bgcolor="#C2C2D6">
    <div align="center">
    <p><font face="Arial, Helvetica, sans-serif">Das Formular wurde mit folgenden
    Angaben verschickt:</font></p>
    </div>
    <div align="center">
    <form name="form2" method="post" action="">
    <table width="356" border="0" cellspacing="2" cellpadding="2">
    <tr>
    <td height="16" width="91"><font size="2" face="Arial, Helvetica, sans-serif">Auftraggeber</font><font face="Arial, Helvetica, sans-serif">:</font></td>
    <td height="16" width="251"> <font face="Arial, Helvetica, sans-serif">
    <?PHP echo "<b>". $auftraggeber."</b>" ;?>
    &nbsp; </font></td>
    </tr>
    </table>
    </form>
    <p>&nbsp;</p>
    </div>
    </body>
    </html>
    +++++++++

  • #2
    http://www.php-resource.de/manual.php?p=ref.outcontrol
    PHP-Code:
    ob_start();
    include (
    'zuspeichern.php');
    if (
    $f fopen('gespeichert.html''w'))
    {
      
    fputs($fob_get_contents());
      
    fclose($f);
      echo 
    'gespeichert.';
    }
    else
      echo 
    'fopen fehlgeschlagen';
    ob_end_clean(); 
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Hallo Titus!

      Danke für deine Antwort aber das funktioniert bei mir leider nicht. Ich hab den Codeschnipsel angepasst, aber wenn ich ihn in ein Form mit Selbstaufruf packe (vor "if ($submit){..." - wenn das Formular also mit Werten gefüllt ist und abgeschickt wurde) lädt die Seite ewig, der Server verabschiedet sich mit "Not allowed" und das HTML-file wird nicht erstellt.

      Wenn ich deinen Codeblock in eine zweite, über "submit" aufgerufene PHP-Seite stecke, wird das ausgefüllte Form zwar angezeigt und die HTML-Seite erstellt, aber die HTML-Seite ist leer.

      Hast du noch ne andere Idee? Ich habe heute schon in einem fetten Kompendium geguckt, habe nichts gefunden, dein Link auf das Online-Handbuch hat mir auch nicht groß geholfen. Ist das Problem so schwierig?? Mit PHP kann man doch ganz andere Sachen regeln!? Ich bin drauf und dran, das Formular mit Acrobat zu basteln.

      Würde mich freuen, wenn du dich noch mal meldest. Jeder andere mit ner Idee ist mir auch willkommen.

      Thanx, HE.

      Kommentar


      • #4
        Versuchen wir es mal so:
        2.
        neue Ziel.php:

        ob_start();
        bisheriger Text der Ziel.php
        ob_end_flush();
        mail verschicken

        3.
        Wenn das nicht tut, müssen wir eben zu anderen Mitteln greifen.
        Die Methode funktioniert allerdings nur mit url_fopen=On (php.ini)
        Ziel.php umbenennen in parseZiel, die neue Ziel.php sieht so aus:
        PHP-Code:
        $par = array();
        foreach(
        $_POST as $k=>$v)
        {
          if (
        is_array($v))
            foreach(
        $v as $kk=>$vv)
              
        $par[] = $k.'['.$kk.'] = 'urlencode($vv);
          else
            
        $par[] = "$k="urlencode($v);
        }
        $f file('http://www.deinedomain.de/pfad/neuZiel.php?parsed=1&'
          
        implode('&'$par));
        $text implode(''$f);
        mail ($empfaenger'Formular'$text,
          
        "From: [email]ich@meinedomain.de[/email]\nDocument-Type: text/html");
        echo 
        $text
        Ganz wichtig bei der Methode: Du musst $_GET statt $_POST bzw. $HTTP_POST_VARS benutzen (oder auf register_globals=On vertrauen).
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Danke!

          Hallo Titus!
          Hab mir deinen Codeschnipsel zu Gemüte geführt und da gings bei mir "kling".
          Klar, man muss den Outputbuffer vor dem Formular aufmachen. So wird das Form
          inkl. Inhalt gepuffert. Dann nur noch in die Zieldatei stopfen und fertig.

          Unten steht, wie ich es nun geregelt habe. Die "Vermailungsfunktion" kann man gleich
          noch drankleben, aber hier nur die reine Speichern-Routine. So funktioniert das.

          Also hab vielen Dank für deine Hinweise! Ich habe 4 Wochen lang immer wieder überlegt,
          ohne funktionierendes Ergebnis. Es klingt vielleicht schwülstig, aber Leute wie du
          sind ein Segen fürs Web! Also Danke! Jetzt kann ich die Site endlich fertigstellen
          und ausliefern.

          -------------------------------------------

          <?php
          # Dieses Skript speichert den Inhalt eines Formulars
          # als statische HTMl-Seite. Das Formular wird quasi
          # abfotografiert.

          # Output-Buffer starten
          ob_start();

          # Ab übernächster Zeile das Formular einfügen +++++++++++++++++
          ?>



          <?php
          # Dateizeiger im Schreibmodus öffnen, Zieldatei erstellen
          $f = fopen('Formular.htm', 'w');

          # Output-Buffer in Dateizeiger schreiben
          fputs($f, ob_get_contents());

          # Dateizeiger schließen
          fclose($f);

          # Output-Buffer leeren und schließen
          ob_end_flush();
          ?>

          Kommentar


          • #6
            auch eine gute Lösung PHP Source Code Utility

            php-Entwicklung | ebiz-consult.de
            PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
            die PHP Marktplatz-Software | ebiz-trader.de

            Kommentar

            Lädt...
            X