Gerrit: kann man eine vom Client aufgerufene HTML-Seite ersetzen?

Hallo,
in Sachen PHP bin ich neu, habe aber schon das ein oder andere programmiert und zum Laufen gebracht.
Jetzt habe ich aber ein Problem, bei dem ich kaum einen Schimmer habe, wie ich eine Antwort finden kann.
Vielleicht könnt Ihr mir helfen?

Was ich möchte ist folgendes:
Ein Nutzer ruft eine HTML Seite vom meinem Server auf. Noch vor der DOCTYPE Deklaration rufe ich eine PHP Funktion auf, die den Inhalt dieser HTML modifizieren soll - krass gesagt auch komplett löschen und neu schreiben.
ABER: Dies soll nicht auf der Festplatte des Servers erfolgen, sondern sozusagen mit der Kopie der HTML-Seite, die letztlich auch zum Client zurück geschickt wird.

Geht das überhaupt?
Mit fopen und Co. habe ich schon versucht, eine Lösung hinzukriegen, aber wenn ich das richtig verstanden habe, können diese Befehle "nur" die Originialdatein auf der Festplatte änder, oder?!

Vielen Dank für Eure Antworten!
Gruß
Gerrit

  1. Mit fopen und Co. habe ich schon versucht, eine Lösung hinzukriegen, aber wenn ich das richtig verstanden habe, können diese Befehle "nur" die Originialdatein auf der Festplatte änder, oder?!

    Anstatt die Datei auszuliefert kannst du den Inhalt der Datei lesen, manipulieren und an den Browser schicken.

    Mit fopen() wäre das prinzipiell möglich, file_get_contents() ist für diesen Zweck aber sicher schlauer.

  2. Hi,

    Was ich möchte ist folgendes:
    Ein Nutzer ruft eine HTML Seite vom meinem Server auf. Noch vor der DOCTYPE Deklaration rufe ich eine PHP Funktion auf, die den Inhalt dieser HTML modifizieren soll - krass gesagt auch komplett löschen und neu schreiben.
    ABER: Dies soll nicht auf der Festplatte des Servers erfolgen, sondern sozusagen mit der Kopie der HTML-Seite, die letztlich auch zum Client zurück geschickt wird.
    Geht das überhaupt?

    ja, das ist ein typischer Anwendungsfall von PHP, so wie er ursprünglich vorgesehen ist: PHP generiert ein HTML-Dokument.

    Mit fopen und Co. habe ich schon versucht, eine Lösung hinzukriegen, aber wenn ich das richtig verstanden habe, können diese Befehle "nur" die Originialdatein auf der Festplatte änder, oder?!

    Du denkst zu kompliziert.
    Alles, was PHP ausgibt, landet als HTML[1]-Ausgabe beim Client. Ausgaben im Sinne von PHP sind dabei auch alle Klartext-Abschnitte außerhalb eines mit <?php ... ?> ausgezeichneten Bereichs.

    Du willst also eigentlich nur ein PHP-Script schreiben, dass abhängig von äußeren Bedingungen mal diese, mal jene Ausgabe macht. Oder auch mal gar keine[2].

    So long,
     Martin

    [1] PHP wird oft eingesetzt, um HTML auszugeben; es kann aber je nach Kontextauch irgendwas anderes als HTML sein.
    [2] "gar keine" muss natürlich immer noch ein valides HTML-Dokument erzeugen, auch wenn dieses dann bestimmte Inhalte nicht hat.

    --
    Finanztipp:
    Leihen Sie sich Geld von einem Pessimisten.
    Er rechnet sowieso nicht damit, dass er es zurückbekommt.
    1. Erst einmal vielen Dank Euch beiden!

      Du denkst zu kompliziert.

      Ich weiß, war immer schon mein Problem :-)

      Alles, was PHP ausgibt, landet als HTML[1]-Ausgabe beim Client. Ausgaben im Sinne von PHP sind dabei auch alle Klartext-Abschnitte außerhalb eines mit <?php ... ?> ausgezeichneten Bereichs.

      Mhm, ich glaub, ich habe verstanden (oder auch nicht, wird sich jetzt klären:).

      Wenn in meiner HTML Datei nun steht:

      <?php
      modifiziereSeite();
      ?>
      <html>
      <head><title>test</title></head>
      <body><p>Dies ist ein Test</p></body>
      </html>

      ...dann würde der original HTML-Code <html>...</html> doch immer auch mit an den Client gesendet, egal was ich noch mit PHP zufüge, oder?!
      Ich möchte aber unbedingt diesen Code unterdrücken und statt dessen mittels modifiziereSeite() eine Mischung aus dem Original-Code und beliebig zugefügten HTML-Tags aus anderen Quellen senden.
      Könnt Ihr mir sagen, wie ich dann die HTML-Ausgabe vermeiden kann?

      Grüße
      Gerrit

      1. Hi,

        Mhm, ich glaub, ich habe verstanden (oder auch nicht, wird sich jetzt klären:).
        Wenn in meiner HTML Datei nun steht:

        <?php
        modifiziereSeite();
        ?>
        <html>
        <head><title>test</title></head>
        <body><p>Dies ist ein Test</p></body>
        </html>

        ...dann würde der original HTML-Code <html>...</html> doch immer auch mit an den Client gesendet, egal was ich noch mit PHP zufüge, oder?!

        richtig soweit. Das möchtest du aber nicht. Also musst du die Struktur des Dokuments anders aufbauen:

        +----------------------------------------------------------------------
         | <!DOCTYPE ...
         | <html>
         | ...
         | Was hier steht, wird in jedem Fall ausgegeben
         | <?php
         | // hier kannst du die Ausgabe fallweise steuern
         | ?>
         | Hier wieder etwas Konstantes, was immer kommt
         | ...
         +----------------------------------------------------------------------

        Diese Struktur ist nicht unbedingt die beste, aber sie zeigt das Prinzip.
        Will man etwas mehr Aufwand treiben, kann man ein Grundgerüst dessen, was ausgegeben werden soll, als Textdatei speichern (oder auch in einer Datenbank ablegen), bei Bedarf lesen, bestimmte Passagen dynamisch ersetzen, und dann alles am Stück ausgeben. Dann hätte man schon eine schöne kleine Template Engine.

        Ich möchte aber unbedingt diesen Code unterdrücken und statt dessen mittels modifiziereSeite() eine Mischung aus dem Original-Code und beliebig zugefügten HTML-Tags aus anderen Quellen senden.
        Könnt Ihr mir sagen, wie ich dann die HTML-Ausgabe vermeiden kann?

        Indem du sie nicht machst. Was nicht da ist, wird auch nicht ausgegeben. Wobei -wie ich schon sagte- wenigstens das nackte Grundgerüst eines validen HTML-Dokuments schon herauskommen sollte.

        Ciao,
         Martin

        --
        Wer keiner Fliege etwas zuleide tut, darf sich nicht über die Maden im Fleisch wundern.
        1. Hallo,

          Ich bezieh mich noch mal auf Martins Antwort, weil Template Engine ist genau das Stichwort:

          Das von Dir erwähnte Konstrukt hatte ich auch schon erfolgreich am Laufen und werde es jetzt auch wieder nehmen.

          Was mich halt irgendwie störte, waren die vielen php aufrufe, denn ich möchte ganz flexibel HTML-code ersetzen und nicht immer nur da, wo ich per <?php die Möglichkeit dazu gebe:

          +----------------------------------------------------------------------
          | <!DOCTYPE ...
          | <html>
          | ...
          | Was hier steht, wird in jedem Fall ausgegeben
          | <?php
          | // hier kannst du die Ausgabe fallweise steuern
          | ?>
          | Hier wieder etwas Konstantes, was immer kommt
          | ...
          +----------------------------------------------------------------------

          Daher kam mir die Idee: Wie wäre es, wenn die aufgerufene Seite nicht nur den vom Template unterschiedlichen HTML Code enthält (und zwar NUR den), sondern beim Nutzer auch noch vollständig ankommt, indem PHP auf dem Weg von der Server-Festplatte zum Nutzer-PC die Unterschiede zwischen Vorlage und aufgerufener Seite erkennt und wie gesagt die aufgerufene HTML-Seite entsprechend ändert.

          Vielen Dank noch einmal an alle!
          Gruß
          Gerrit

          1. Hallo noch mal,

            hab selbst eine Lösung hier gefunden:
            http://de2.php.net/manual/de/function.ob-start.php

            Klappt fantastisch!
            Gruß
            Gerrit

      2. <?php
        modifiziereSeite();
        ?>
        <html>
        <head><title>test</title></head>
        <body><p>Dies ist ein Test</p></body>
        </html>

        zB. so:

        <?php  
        if (iregndeine Bedingung) {  
         echo '<html><head><title>test</title></head><body><p>Dies ist ein Test</p></body></html>';  
        } else {  
         echo '<html><head><title>test2</title></head><body><p>Dies ist ein anderer Test</p></body></html>';  
        }  
        ?>
        
      3. Wenn in meiner HTML Datei nun steht:

        <?php
        modifiziereSeite();
        ?>
        <html>
        <head><title>test</title></head>
        <body><p>Dies ist ein Test</p></body>
        </html>

        ...dann würde der original HTML-Code <html>...</html> doch immer auch mit an den Client gesendet, egal was ich noch mit PHP zufüge, oder?!

        Kommt darauf an was Du machst. Mit

        <?php
        if (modifiziereSeite() === false) {
        ?>
        <html>
        <head><title>test</title></head>
        <body><p>Dies ist ein Test</p></body>
        </html>
        <?php
        } else {
        ?>
        <html>
        <head><title>Hier gibt es nichts zu sehen.</title></head>
        <body></body>
        </html>
        <?php
        }
        ?>

        könntest Du noch was anderes ausliefern, falls hier modifiziereSeite() true zurückgibt.