PHP-Code im Browser sichtbar machen
Schröder
- datenbank
- php
1 Raketenwilli- php
0 Felix Riesterer0 Schröder0 Rolf B0 Der Martin
0 TS
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>
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.
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.
@@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
Hi,
Mit Heredoc-Syntax kommt das Ding abosolut nicht klar, guckst du.
wo sollte da Heredoc sein?
cu,
Andreas a/k/a MudGuard
@@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
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
@@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
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
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!
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:
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
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.
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
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
Hello,
dafür hat PHP die Funktion highlight_file().
Glück Auf
Tom vom Berg