2009-05-13 8 views
1

Ich versuche, PHP-Dateien, die 'umfassen' eine Vorlage in HTML-Datei, wie es so zu generieren:Fügen Sie dynamische PHP in generierten PHP-Datei

$page = htmlspecialchars("Hello! <?php include("template.html"); ?>"); 

Aber, wenn ich es laufen, erhalte ich:

Parse-Fehler: Syntaxfehler, unerwartete T_STRING in /home/oliver/web/postmanapp.com/public/core.php on line 15

Ich bin ziemlich sicher, ich muss den PHP-Code entkommen, nur nicht sicher, wie .

+0

Gumbo löste Ihr erstes Problem. Was erwarten Sie von den htmlspecialchars? Es wird deine Zeichenfolge in 'Hallo! <? Php include ("template.html"); ? > "Planen Sie, das an den Browser zu senden? – jmucchiello

Antwort

8

Sie müssen alle doppelten Anführungszeichen in Strings, die in doppelte Anführungszeichen gesetzt sind, auskommentieren. So sollte diese Arbeit:

$code = "Hello! <?php include(\"template.html\"); ?>"; 

PHP manual about strings See.

Und wenn Sie diesen Code in eine Datei setzen wollen, könnten Sie die file_put_contents function:

file_put_contents('myscript.php', $code); 
-3

Das Problem ist, mit dem>, die immer einen Codeblock in PHP endet, zu einem ungekündigten String führt? . Alles was Sie tun müssen, ist das End-Tag in zwei getrennte Strings aufgeteilt, die verkettet werden können:

$page = htmlspecialchars("Hello! <?php include("template.html"); ?" . ">"); 

Und wie die vorherige Antwort angegeben, müssen Sie auch die doppelten Anführungszeichen innerhalb der Zeichenfolge entkommen, oder einfache Anführungszeichen verwenden :

$page = htmlspecialchars("Hello! <?php include('template.html'); ?" . ">"); 

ich auch würde empfehlen, in die Gewohnheit, immer einfache Anführungszeichen zu verwenden, wenn Sie nicht implictic Variablensubstitution verwenden. Ich kann mich daran erinnern, dass es etwas schneller ist, da die Zeichenfolge für Variablennamen nicht analysiert werden muss.

+0

Das ist eigentlich nicht wahr. Sie können?> In doppelte Anführungszeichen setzen. – danieltalsky

+0

OK .. muss an etwas anderes gedacht haben ... – RoadieRich

4

Die Antwort ist eine Kombination aus einigen der anderen Vorschläge, aber keiner von ihnen würde das Problem lösen, auch kombiniert!

Problem 1. Unescaped Doppel Zitate

"Hello! <?php include("template.html"); ?>" 

Hier haben Sie, was wie eine einzelne Saite aussieht. PHP sieht das öffnende Zitat, und dann kommt es zum Zitat direkt vor der Wortvorlage und es heißt: Oh, die Zeichenfolge ist jetzt fertig. Dann sieht es eine Vorlage, die es für eine Variable hält. Dann sieht es einen Punkt und denkt, dass es ein neuer Verkettungsoperator ist. Dann sieht es das Anführungszeichen nach html und es denkt, dass es eine neue Zeichenfolge ist, die direkt nach einer solchen Variable nicht erlaubt ist.

Also, Sie müssen entweder:

'Hello! <?php include("template.html"); ?>' 

(Was ist das, was ich würde empfehlen, Einzelzeichenfolgen in Anführungszeichen in PHP läuft etwas schneller, weil es nicht für Variablen innerhalb der Zeichenfolge suchen hat..)

oder, wie die andere Person vorgeschlagen, die Escape-Zeichen für die doppelten Anführungszeichen:

"Hello! <?php include(\"template.html\"); ?>" 

Problem 2.Falscher Ort für htmlspecialchars()

Aber Sie haben ein anderes, schlimmeres Problem. htmlspecialchars wandelt im Grunde alle HTML-Zeichen in ihre HTML-Zeichen-Entitäten um.

Mit anderen Worten, < wird &lt;.

Also, was Sie in Ihren PHP-Datei sind die Ausgabe wird sein:

Hello! &lt;?php include("template.html"); ?&gt; 

Wenn Sie diese Datei ausführen, wird das PHP nicht ausführen, weil es keine gültige offenen Tag ist.

Problem 3. Diese von nicht eine gute Verwendung ist enthalten

Ich wette, es gibt einen Weg besseren Weg, um Ihr Problem zu lösen als PHP zu verwenden, um ein PHP-include-Tag zu schreiben, die eine andere Datei enthält.

Ein früherer Benutzer hat Recht ... file_put_contents() oder file_get_contents() ist wahrscheinlich etwas näher an dem, was Sie wollen. Aber wirklich, es gibt wahrscheinlich einen besseren Weg, wenn Sie PHP verwenden, um eine andere Datei in PHP zu schreiben. Ich garantiere es fast.

Verwandte Themen