Выполнение всех выходных файлов PHP проходит через «файл фильтра» перед отображением

Есть ли способ, чтобы весь мой файл PHP и / или HTML-файлов был «отфильтрован» перед отображением в браузере? Я понял, что могу передать его через глобальную функцию, прежде чем она будет отображаться, но я застрял в реализации. Пожалуйста помоги.

Если есть лучший способ добиться такого же результата, я был бы рад узнать.

Благодарю.

Solutions Collecting From Web of "Выполнение всех выходных файлов PHP проходит через «файл фильтра» перед отображением"

Проверьте 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);