Schröder: PHP-Code im Browser sichtbar machen

Hallo zusammen,

war letztlich vor einem Jahr hier und nun geht es weiter und ich hoffe auf eure geschätzte Hilfe.

Nachfolgender Code zeigt mir in Rapid php das an, was ich gerne hätte. Aber nun fehlt mir wie ich es im Browser darstellen könnte. Könnte mir da jemand einen Tipp geben?

Besten Dank im Voraus

Gruß D.G.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
	<title>DocSafety</title>
  <title>Hello!</title>
</head>
<body>

<label for="Produktauswahl">Produktauswahl</label>
    <select id="produktname" name="produktname">
    <option>Produktname</option>
<?php
        $HostName = '___.___._.__';
        $mysqli = @new mysqli($HostName, "root", "", "test");
        $KuCBA ='afb';
        $result = $mysqli->query("SELECT Produktname, ArtNr, Ziel, AuftragID FROM label"
            . " WHERE label.cba = '$KuCBA'"
            . " ORDER BY Produktname");
        $row = $result->fetch_assoc();
        while ($dsatz = $result->fetch_assoc())
   {
      echo "<option>". htmlspecialchars($dsatz["Produktname"]) . "</option>";
   }
       $result->close();
       $mysqli->close();
    ?>


</body>
</html>
  1. Das genannte Problem ist trivial. Im einfachsten Fall öffnest Du das PHP-Skript als Datei und ersetzt alle Vorkommen von < und > durch die Entitys:

    <?php
    ### File: showFile.php
    
    $FileName="test.php";
    if ( is_readble( $FileName ) ) {
       echo '<pre><code>' 
       . htmlspecialchars( file_get_contents( $FileName ) ) 
       . '<code></pre>';
    } else {
       trigger_error(
          'Fatal: Die Datei "' . $FileName . '" konnte nicht gelesen werden.',
          E_USER_ERROR
       );
    }
    

    Das ist der simple Teil. Schwieriger ist es, dafür zu sorgen, dass die Anzeige von unerlaubten Dateien nicht stattfindet (SEHR WICHTIG!) - oder eine Syntaxhervorhebung zu integrieren.

    Mehr dazu hier:

    Einer weitere, einfache und sichere Möglichkeit besteht darin, die Datei mit der Endung '.phps' abzulegen und den Apache Webserver wie folgt zu konfigurieren:

    <FilesMatch ".+\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
    

    und dann einfach auf diese Datei mit der Endung '.phps' zu verlinken.

    Wenn es Dein Server ist, dann kannst Du in einer Shell auf einem unixoiden Server mittels

    cd /etc/apache2;
    grep -Rn phps *;
    

    herausfinden, ob obige Konfiguration (die übrigens den Voreinstellungen entspricht) schon eingetragen wurde. Hint: Unter RedHat-artigen Linuxen kann das auch im Ordner /etc/httpd/ oder /etc/httpd2/ erfolgt sein…

    Wenn es so ist, genügt es, die Datei mit der Endung '.phps' abzulegen und abzurufen.

    1. cd /etc/apache2;
      grep -Rn phps *;
      

      herausfinden, ob obige Konfiguration (die übrigens den Voreinstellungen entspricht) schon eingetragen wurde. Hint: Unter RedHat-artigen Linuxen kann das auch im Ordner /etc/httpd/ oder /etc/httpd2/ erfolgt sein…

      Wenn es so ist, genügt es, die Datei mit der Endung '.phps' abzulegen und abzurufen.

      Allerdings kann es sein, dass in der voreingestellten Konfiguration der Zugriff verboten ist:

      <FilesMatch ".+\.phps$">
          SetHandler application/x-httpd-php-source
          # Deny access to raw php sources by default
          # To re-enable it's recommended to enable access to the files
          # only in specific virtual host or directory
          Require all denied
      </FilesMatch>
      

      Man kann den Zugriff und die Anzeige der „phps-Dateien“ also, wenn der Hoster es dem Kunde erlaubt, wieder erlauben.

    2. @@Raketenwilli

      Einer weitere, einfache und sichere Möglichkeit besteht darin, die Datei mit der Endung '.phps' abzulegen

      Wieder was gelernt.

      und den Apache Webserver wie folgt zu konfigurieren:

      Hat mein Hoster wohl schon so gemacht. Funzt.

      Die Umwandlung in HTML nebst Syntax-Highlighting findet serverseitig statt?

      Mit Heredoc-Syntax kommt das Ding abosolut nicht klar, guckst du. (Edit: Problem durch MudGuards Antwort behoben.)

      Da kann man nichts machen?

      😷 LLAP

      --
      „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
      — Joachim Gauck über Impfgegner
      1. Hi,

        Mit Heredoc-Syntax kommt das Ding abosolut nicht klar, guckst du.

        wo sollte da Heredoc sein?

        cu,
        Andreas a/k/a MudGuard

        1. @@MudGuard

          Mit Heredoc-Syntax kommt das Ding abosolut nicht klar, guckst du.

          wo sollte da Heredoc sein?

          Oops, ich hatte die URLs in den beiden Links vertauscht. Jetzt berichtigt, guckst du.

          😷 LLAP

          --
          „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
          — Joachim Gauck über Impfgegner
          1. Hi,

            Oops, ich hatte die URLs in den beiden Links vertauscht. Jetzt berichtigt, guckst du.

            ah, da ist Heredoc, ich dachte schon, Du machst den RolfHorst und definierst Fachbegriffe einfach mal um …

            Schon mal probiert, das beendende EOT an den Zeilenanfang zu setzen?
            Ich weiß, ist nicht mehr notwendig seit 7.3.0, aber wer weiß, ob das dieser Parser auch schon weiß?

            cu,
            Andreas a/k/a MudGuard

            1. @@MudGuard

              Oops, ich hatte die URLs in den beiden Links vertauscht. Jetzt berichtigt, guckst du.

              ah, da ist Heredoc, ich dachte schon, Du machst den RolfHorst und definierst Fachbegriffe einfach mal um …

              Diese Unterstellung nehme ich persönlich!!1elf

              Schon mal probiert, das beendende EOT an den Zeilenanfang zu setzen?

              Danke, das hat geholfen.

              Ich weiß, ist nicht mehr notwendig seit 7.3.0, aber wer weiß, ob das dieser Parser auch schon weiß?

              Dummer Parser, der.

              😷 LLAP

              --
              „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
              — Joachim Gauck über Impfgegner
              1. Hi,

                ah, da ist Heredoc, ich dachte schon, Du machst den RolfHorst und definierst Fachbegriffe einfach mal um …

                Diese Unterstellung nehme ich persönlich!!1elf

                Die Gedanken sind frei …

                Ich weiß, ist nicht mehr notwendig seit 7.3.0, aber wer weiß, ob das dieser Parser auch schon weiß?

                Dummer Parser, der.

                oder nur veraltet?

                cu,
                Andreas a/k/a MudGuard

            2. Schon mal probiert, das beendende EOT an den Zeilenanfang zu setzen? Ich weiß, ist nicht mehr notwendig seit 7.3.0,

              Ok. Das war mir neu.

              Also testen!

              <?php
              
              echo <<<FOOTER
                  </body>
                </html>
                  FOOTER;
              

              Ergebnis: Fehler!

              Parse error: Invalid body indentation level (expecting an indentation level of at least 2)

              Hm. Nachlesen.

              <?php
              echo <<<FOOTER
                  </body>
                </html>
              FOOTER;
              

              Ergebnis: Nicht optimal.

                  </body>
                </html>
              

              Aber laut Handbuch darf die Weite der Einrückungen die des umfassten Textes (gemeint wohl die am wenigsten eingerückte Zeile) nicht überschreiten. Was passiert eigentlich, wenn ich das genau nehme?

              <?php
              echo <<<FOOTER
                  </body>
                </html>
                FOOTER;
              

              Ergebnis: Suppi!

                </body>
              </html>
              

              Bingo! PHP korrigiert dann die Einrückung!

              • view-source:https://home.fastix.org/Tests/userinfo.php
              • https://home.fastix.org/Tests/userinfo.phps (Das ist „harter“ Link auf die userinfo.php)

              Das kann man gebrauchen um wenig Streß beim Abgleich der Einrücktiefe zwischen PHP und dem resultierenden HTML zu haben. Macht die Sache übersichtlicher.

              Wieder was Nützliches gelernt!

              Nachtrag: Der Apache kann es übrigens als PHP-Source darstellen:

              Heredoc mir Einrückungen, Ansicht als PHP-Source  im Apache

  2. Lieber Schröder,

    wie ich es im Browser darstellen könnte.

    was genau meinst Du damit? Dass man PHP-Code sehen kann, oder dass man die Inhalte Deiner Datenabfrage sinnvoll angezeigt bekommt?

    <body>
    
    <label for="Produktauswahl">Produktauswahl</label>
        <select id="produktname" name="produktname">
        <option>Produktname</option>
    <?php [...] ?>
    
    
    </body>
    </html>
    

    Da fehlt so manches. Einmal ist das <select> nicht geschlossen worden. Das ist nicht schön. Und außerdem hätte es von der Semantik her einen Sinn, das Label in ein passendes Textelement zu setzen. Entweder <p> oder <li> bieten sich an. Letzteres benötigt zusätzlich ein <ul>, damit der Listenpunkt einen Sinn hat. Aber wahrscheinlich hast Du nur die ganzen formularbezogenen Anteile aus dem Beispiel entfernt, um es auf das Problem zu reduzieren.

    Viel schlimmer ist, dass der Inhalt des for-Attributs zu keinem id-Wert passt. Dein Label gehört also zu keinem Formularelement, welches es bezeichnet: for="Produktauswahl" [...] id="produktname". Das kann man aber leicht reparieren.

    Liebe Grüße

    Felix Riesterer

    1. Hallo zusammen und erst einmal besten Dank.

      Ich komme aus der Access / VBA - Welt und bin dabai meinen Büro-Server mittels PHP/MYSQL in Bewegung zubringen. Ich versuche Eure Infos jetzt erst einmal zu (verarbeiten)/verdauen.

      Noch ein schönes Wochenende.

      Gruß D.G.

      1. Hallo Schröder,

        was tatsächlich dein Problem ist, ist zumindest mir immer noch nicht klar.

        Fehlt Dir Dir Info, wie Du deinen Webserver dazu bringst, das PHP Script auszuführen und seine Ausgabe an den Browser zu schicken? Dazu wäre vor allem die Info wichtig, welchen Webserver zu verwendest. Apache? IIS? nginx? Was anderes?

        Oder weißt Du nicht, wie Du deinen PHP Code auf deinen Server bringst?

        Rolf

        --
        sumpsi - posui - obstruxi
      2. Hallo,

        Ich komme aus der Access / VBA - Welt und bin dabai meinen Büro-Server mittels PHP/MYSQL in Bewegung zubringen. Ich versuche Eure Infos jetzt erst einmal zu (verarbeiten)/verdauen.

        trotzdem könnte es nicht schaden, die Frage noch zu beantworten, die Felix aufgeworfen hat (und die auch mich beschäftigt hat): Willst du wirklich, wie im Titel formuliert, PHP-Code im Browser anzeigen? Oder doch eher die Ausgabe des PHP-Codes?

        Ich vermute eher letzteres; den PHP-Code als solchen im Browser anzuzeigen, ist relativ untypisch. Aber der Raketentechniker scheint genau das verstanden zu haben. Ergo: Klärungsbedarf.

        Das unvollständige HTML ist noch eine andere Baustelle.

        Immer eine Handbreit Wasser unterm Kiel
         Martin

        --
        The taste of love: The more you get, the more you want
        (aus The Lightning Seeds: Sense)
  3. Hello,

    dafür hat PHP die Funktion highlight_file().

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.