Включить динамический PHP в сгенерированный файл php - PullRequest
1 голос
/ 13 мая 2009

Я пытаюсь сгенерировать php-файлы, которые «включают» шаблон html-файла, например:

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

Но когда я запускаю его, я получаю:

Ошибка разбора: синтаксическая ошибка, неожиданный T_STRING в /home/oliver/web/postmanapp.com/public/core.php в строке 15

Я почти уверен, что мне нужно экранировать код PHP, просто не знаю, как.

Ответы [ 3 ]

8 голосов
/ 13 мая 2009

Вы должны избегать любых двойных кавычек внутри строк, которые объявлены в двойных кавычках. Так что это должно работать:

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

См. Руководство по PHP для строк .

И если вы хотите поместить этот код в файл, вы можете использовать функцию file_put_contents :

file_put_contents('myscript.php', $code);
4 голосов
/ 13 мая 2009

Ответ - это комбинация некоторых других предложений, но ни одно из них не решит проблему, даже вместе!

Задача 1. Неэкранированные двойные кавычки

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

Здесь у вас есть то, что выглядит как одна строка. PHP видит начальную кавычку, а затем попадает в кавычку прямо перед словом template и говорит: о, строка готова. Затем он видит шаблон, который он считает переменной. Затем он видит точку и думает, что это новый оператор конкатенации. Затем он видит кавычку после html и думает, что это новая строка, которая не допускается сразу после такой переменной.

Итак, вам нужно либо:

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

(Это то, что я бы порекомендовал. Строки в одинарных кавычках в PHP работают немного быстрее, потому что не нужно искать внутри строки переменные.)

или, как предложил другой человек, используя escape-символ для двойных кавычек:

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

Задача 2. Неправильное место для htmlspecialchars ()

Но у вас есть другая, более серьезная проблема. htmlspecialchars в основном превращает все символы HTML в их объекты символов HTML.

Другими словами, < становится &lt;.

Итак, то, что вы выводите в файл PHP, будет таким:

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

Когда вы запускаете этот файл, PHP не запускается, потому что нет действительного открытого тега.

Проблема 3. Неправильное использование include

Могу поспорить, что есть ПУТЬ лучший способ решить вашу проблему, чем использовать PHP для написания тега включения PHP, который включает ДРУГОЙ файл.

Ранний пользователь прав ... file_put_contents () или file_get_contents (), вероятно, что-то ближе к тому, что вы хотите. Но на самом деле, всякий раз, когда вы используете PHP для записи в PHP другого файла, возможно, есть лучший способ. Я почти гарантирую это.

0 голосов
/ 13 мая 2009

Проблема в?>, Который всегда заканчивает блок кода в php, приводя к неопределенной строке. Все, что вам нужно сделать, это разделить конечный тег на две отдельные строки, которые можно объединить:

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

И, как говорилось в предыдущем ответе, вам также нужно экранировать двойные кавычки внутри строки или использовать одинарные кавычки:

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

Я также рекомендовал бы привыкнуть использовать одинарные кавычки, когда вы не используете имплицитную подстановку переменных. Кажется, я помню, что читал, что это немного быстрее, так как строка не нуждается в разборе имен переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...