<?php ## Пример скрипта, использующего префильтр кода для шаблонов.
show_source(__FILE__); echo "<hr>";
require_once "../../lib/config.php";
require_once "PHP/CodeFilter.php";
// Если нужно, подключаем Debug_BacktraceDumper для
// улучшенного вывода отладочных сообщений PHP.
if (true) {
require_once "Debug/BacktraceDumper.php";
Debug_BacktraceDumper::set_error_handler();
}
// Некоторая переменная с HTML-разметкой.
$test = "<b>test</b>";
// Создаем объект-фильтр и настраиваем его параметры.
$filter = new PHP_CodeFilter();
$filter->addFilter('filter_phpOutputOperator');
// Запускаем включаемый файл (аналог include), но его
// код перед выполнением обрабатывается префильтром.
$filter->includeFile('template.php');
// string filter_phpOutputOperator(string $code)
// Префильтр кода: заменяет операторы '< ?= ... ? >'
// (без пробелов, конечно) на '< ?=htmlspecialchars(...)? >',
// что обеспечивает автоматический квотинг HTML в шаблонах
// и повышает безопасность скриптов.
function filter_phpOutputOperator($code)
{
return preg_replace(
'/(<\?=) (.*?) (?: \s*;)* \s* (\? >)/sx',
'$1htmlspecialchars($2, ENT_QUOTES)$3',
$code
);
}
?>
Проверка htmlspecialchars-квотинга вывода:
(Должна быть выведена HTML-разметка, как после htmlspecialchars().)
<b>test</b>
Проверка использования неопределенной переменной:
(Должна быть ссылка на /home/dklab/domains/www/lib/PHP_CodeFilter/demo/test/PHP_CodeFilter/template.php.)
Проверка использования неопределенной переменной из другого файла:
(Должна быть ссылка на /home/dklab/domains/www/lib/PHP_CodeFilter/demo/test/PHP_CodeFilter/template2.php.)
Array
(
[0] => Array
(
[file] => /home/dklab/domains/www/lib/PHP_CodeFilter/demo/test/PHP_CodeFilter/template2.php
[line] => 12
[function] => includefile
[class] => php_codefilter
[type] => ->
[args] => Array
(
[0] => template2.php
)
)
[1] => Array
(
[file] => /home/dklab/domains/www/lib/PHP_CodeFilter/demo/test/PHP_CodeFilter/filter.php
[line] => 23
[function] => includefile
[class] => php_codefilter
[type] => ->
[args] => Array
(
[0] => template.php
)
)
)
Проверка вызова несуществующей функции (фатальная ошибка):
(Должна быть ссылка на /home/dklab/domains/www/lib/PHP_CodeFilter/demo/test/PHP_CodeFilter/template.php!)
Fatal error: Call to undefined function: aaa() in /home/dklab/domains/www/lib/PHP_CodeFilter/demo/test/PHP_CodeFilter/template.php on line 16