Включая динамический HTML с PHP
Вопрос
У меня есть переменные PHP для размещения во включенном HTML-файле. Каков наилучший способ выполнить это?
//contents of file1.php
$variable1 = "text 1";
$variable2 = "text 2"
$newContent = include('file2.php');
echo $newContent;
//contents of file2.php
<p>standard HTML with PHP... <strong><?=$variable1?></strong></p>
<p><?=$variable2?></p>
Этот общий метод считается нормальным, но реальный код здесь не работает. Использую ли я file_get_contents () или include (), как мне выполнить PHP в файле include для вывода правильного содержимого?
Должен ли я использовать что-то вроде HTML>>>
Решение
То, что вы делаете, хорошо, и вы обнаружите, что большинство людей используют один и тот же точный метод. Лично я бы не использовал короткие теги PHP (некоторые хосты не включают его), но это вопрос предпочтений.
Правка . В соответствии с вашими правками кажется, что у вас не включены короткие теги. Проверьте свой ini ( http://php.net/manual/en/ini.core. PHP ). Но вы действительно не должны использовать короткие теги, потому что, как упоминает clownbaby, PHP 6 будет их устаревать. Даже если вы не заботитесь о проверке своего кода на будущее, они по-прежнему хлопотны (что очевидно, потому что ваш код не работает). Переключитесь на <?php echo $variable1; ?>
и все будет в порядке.
Другие советы
Я думаю, что ваш код в порядке, даже большинство фреймворков используют его ...
Что касается использования коротких тегов, некоторые серверы не допускают этого, поэтому я использую обходной путь:
if ((bool) @ini_get('short_open_tag') === FALSE){
echo eval('?>'.preg_replace("/;*\s*\?>/", "; ?>", str_replace('<?=', '<?php echo ', file_get_contents("path/to/file2.php"))));
}else{
$newContent = include("path/to/file2.php");
echo $newContent;
}
$newContent = include('file2.php');
echo $newContent;
Вам не нужно echo
ничего здесь делать. Просто включение файла PHP должно выполнить любой код внутри него и выплюнуть интерполированный шаблон на страницу. Хотя есть такая вещь, как возвращение значения из include
, это редко используемая функция, которую вы обычно можете игнорировать.
Как сказал ekhaled, вам может потребоваться включить короткие теги или заменить их всегда поддерживаемым <?php ... ?>
синтаксисом в стиле инструкций обработки.
Однако важно htmlspecialchars
вводить каждую текстовую строку при ее включении в HTML, иначе у вас есть потенциальная дыра в безопасности XSS.
<?php
function h($text) {
echo(htmlspecialchars($text, ENT_QUOTES));
}
?>
...
<p>standard HTML with PHP... <strong><?php h($variable1) ?></strong></p>
<p><?php h($variable2) ?></p>