PHP Mailer - andere Rückgabe -> WIE?
Simon
- php
Hi Forum!
Ich (*PHP Newbie*) setzte den PHP-Mailer von http://www.patshaping.de/ in der Version 2.3.1 ein. Im Teil der Überprüfung auf Name, Mailadresse etc. gibt er auch entsprechende Fehlerseiten zurück.
AUSZUG -->
if(!$name && !$emailad && !$subject && !$text) showhtml("no_data.inc");
function showhtml($file)
{
$hf = fopen($file,"r");
if(!$hf) die;
$html = fread($hf,filesize($file));
fclose($hf);
print $html;
exit;
}
<--
Wenn ich dem jetzt sage showhtml(start.php) stellt er mir zwar die PHP Seite dar, doch funktioniert das PHP nicht: sämtiche Pfade sind flasch etc. Wenn ich stattdessen eine andere HTML Datei angebe kommt er auch mit den Pfaden nicht klar. Mhhh????
Ich will einfach nur, dass er diese PHP Seite (start.php?site=html/msg/no_data.inc) samt Variablen anzeigt. Mit readfile("irgendwas") oder include("irgendwas") statt showhtml("irgendwas")geht es nicht - auch wieder die Pfade! Und wenn ich direkt readfile("../../start.php?site=html/feedback/msg/no_data.inc") schreibe, kommt "failed to open stream: Invalid argument ..."
Wie kann man das realisieren?
Simon
Moin!
function showhtml($file)
{
$hf = fopen($file,"r");
if(!$hf) die;
$html = fread($hf,filesize($file));
fclose($hf);
print $html;
exit;
}
Wenn ich dem jetzt sage showhtml(start.php) stellt er mir zwar die PHP Seite dar, doch funktioniert das PHP nicht: sämtiche Pfade sind flasch etc. Wenn ich stattdessen eine andere HTML Datei angebe kommt er auch mit den Pfaden nicht klar. Mhhh????
Logisch. Wie du der Funktion entnehmen kannst, wird dabei die angegebene Textdatei geöffnet, in eine Variable eingelesen und dann jedes einzelne Zeichen, was gelesen wurde, mit print an den Browser ausgegeben.
Nirgendwo wird auch nur ein einziges der eingelesenen Zeichen als PHP-Code interpretiert.
Ich will einfach nur, dass er diese PHP Seite (start.php?site=html/msg/no_data.inc) samt Variablen anzeigt. Mit readfile("irgendwas") oder include("irgendwas") statt showhtml("irgendwas")geht es nicht - auch wieder die Pfade! Und wenn ich direkt readfile("../../start.php?site=html/feedback/msg/no_data.inc") schreibe, kommt "failed to open stream: Invalid argument ..."
Die korrekte Variante war da ja auch noch nicht dabei. Erstens: include() wäre die Wahl der Mittel, wenn du nicht nur Text einlesen und wieder ausgeben willst, sondern den im Text enthaltenen PHP-Code aus ausführen und das Ergebnis haben willst.
Allerdings muß der so eingebundene Code zu dem einbindenden Code passen! Du kannst beispielsweise nicht einfach in einer Funktion Code mit include() einbinden, der seinerseits eine komplette Seite inklusive PHP-Funktionen darstellt - verschachtelte Funktionsdefinition ist in PHP nicht erlaubt.
Eine weitere Möglichkeit wäre, den gelesenen Code durch eval() zu jagen. Das ist aber vermutlich ähnlich böse, wie include().
Du kannst auch die fertige Seite durch einen HTTP-Request von deinem Server abfragen. Dann mußt du das fopen() entsprechend anpassen und als Dateiname die komplette URL angeben. Als Resultat kriegst du dann die schon geparste Seite. Allerdings kann das bei deinem Provider doppelten Traffic bedeutet, wenn der am Apache-Webserver die Requests und ausgelieferten Bytes zählt (und es ihm egal ist, dass die Bytes auf dem Server bleiben). Außerdem braucht so ein doppelter Request natürlich Zeit.
Mit readfile() kannst du ebenfalls eine URL angeben, sofern url_fopen_wrappers() eingeschaltet sind und dies erlauben (gilt auch für fopen()).
Und ansonsten solltest du dir vielleicht ein gutes Template-System zulegen, mit dem man all dies simpel erledigen kann. :)
- Sven Rautenberg