Есть ли способ, чтобы весь мой файл PHP и / или HTML-файлов был «отфильтрован» перед отображением в браузере? Я понял, что могу передать его через глобальную функцию, прежде чем она будет отображаться, но я застрял в реализации. Пожалуйста помоги.
Если есть лучший способ добиться такого же результата, я был бы рад узнать.
Благодарю.
Проверьте ob_start, который позволяет передать обработчик обратного вызова для последующей обработки вашего вывода скрипта.
Например, PHP включает встроенный обратный вызов ob_gzhandler для использования при сжатии вывода:
<?php ob_start("ob_gzhandler"); ?> <html> <body> <p>This should be a compressed page.</p> </html> <body>
Вот более полный пример, иллюстрирующий, как вы могли бы убрать ваш HTML с аккуратным расширением :
function tidyhtml($input) { $config = array( 'indent' => true, 'output-xhtml' => true, 'wrap' => 200); $tidy = new tidy; $tidy->parseString($input, $config, 'utf8'); $tidy->cleanRepair(); // Output return $tidy; } ob_start("tidyhtml"); //now output your ugly HTML
Если вы хотите, чтобы все ваши скрипты PHP использовали один и тот же фильтр, не включая его напрямую, ознакомьтесь с директивой конфигурации auto_prepend_file .
Вы можете использовать буферизацию вывода и указать обратный вызов при вызове ob_start()
<?php function filterOutput($str) { return strtoupper($str); } ob_start('filterOutput'); ?> <html> some stuff <?php echo 'hello'; ?> </html>
Вы можете использовать функции буферизации вывода PHP для этого
Вы можете предоставить метод обратного вызова, который вызывается при сбросе буфера, например:
<?php function callback($buffer) { // replace all the apples with oranges return (str_replace("apples", "oranges", $buffer)); } ob_start("callback"); ?> <html> <body> <p>It's like comparing apples to oranges.</p> </body> </html> <?php ob_end_flush(); ?>
В этом случае вывод буферизуется, а не отправляется из сценария, и непосредственно перед сбросом вызывается метод обратного вызова.
Посмотрите на использование Smarty . Это шаблонная система для PHP, это хорошая практика для использования и в которую вы можете подключить глобальные фильтры вывода.
edit: Ответ Павла лучше. Так было бы
ob_start("my_filter_function");
Мой первоначальный ответ был:
Это может быть достигнуто с помощью буферизации вывода .
Например:
ob_start(); // Generate all output echo "all my output comes here." // Done, filtering now $contents = ob_get_contents(); ob_end_clean(); echo my_filter_function($contents);