Мне нужно включить PHP-файл, используя Apache SSI, а не директиву PHP include.Переменная PHP неопределенная во включенном файле
В page.php у меня есть:
<body>
<?php
$text = "This is text";
?>
<!--#include virtual="file.php" -->
</body>
В file.php у меня есть:
<p>This is a test</p>
<?php
echo "<p>".$text."</p>";
?>
Отображается первая строка текста, но затем я получаю ошибку «Undefined переменной в файле .php line 3. "
Я думал, что SSI была встроенной заменой, поэтому не должно быть проблем с определением области обзора? Какую прекрасную печать я пропустил? John
Вы почти правильно поняли, НО: «встроенный» из чего? Механизмы apache, конечно, не могут работать внутри движка php, это разные уровни. Включение происходит внутри обработки запроса в apache, а не в стороне php. Таким образом, первое выполнение сценариев создает текст разметки, содержащий включение SSI, тогда и только тогда это включение может быть обработано apache. Но это означает: первый шаг интерпретации оставлен, поэтому все переменные там потеряны. – arkascha
В документации (http://httpd.apache.org/docs/2.2/howto/ssi.html) указано, что директива 'virtual' принимает оцениваемый вывод вашего файла' file.php', который вы включили. Поэтому сначала обрабатывается ваш php-файл 'file.php' и включается результат. Документация также предупреждает, что это более или менее включает статический контент. Почему вы не можете просто использовать php-include? – blad
Спасибо за разъяснение. Знаешь, там был мелкий шрифт. Я ищу хак, который позволяет мне включать файл из файла PHP или HTML. Настоящий код проверяет, существует ли переменная, прежде чем пытаться ее использовать. – John