2009-07-22 6 views
5

すべてのPHPファイルおよび/またはHTMLファイル出力をブラウザに表示する前に「フィルタリング」する方法はありますか?私はそれが表示される前にグローバル関数を渡すことができると思ったが、私は実装に固執している。助けてください。すべてのPHPファイル出力が表示される前に「フィルタファイル」を通過させる

同じ結果を得るためのより良い方法がある場合は、私は知ってうれしいです。

ありがとうございました。

答えて

14

ob_startをチェックすると、スクリプト出力の後処理にコールバックハンドラを渡すことができます。

<?php 

ob_start("ob_gzhandler"); 

?> 
<html> 
<body> 
<p>This should be a compressed page.</p> 
</html> 
<body> 

ここでは、tidy extensionとあなたの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は組み込みのコールバックob_gzhandler使用するための出力を圧縮するにはが含まれて

すべてのPHPスクリプトが同じフィルターを直接使用することなく使用されていることを確認したい場合は、auto_prepend_file設定ディレクティブを参照してください。

+0

+1良い答えのために、私はきちんとしたクラスを知らなかった。それはネイティブクラスですか? –

+0

いいえ、拡張機能です。 PECL経由でインストールします。 apt-getは典型的なDebian/Ubuntuボックスにphp5-tidyをインストールします。 –

+0

非常に良い答え、私はそれを私のウェブサイトに追加する必要があります – T0xicCode

0

Smartyをご覧ください。これは、PHPのテンプレートシステムです。これは、使用するのがよい方法であり、グローバル出力フィルタをプラグインすることができます。

0

編集:Paulの返信が良いです。 output bufferingで達成することができる

:だから、

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); 
3

あなたは、出力バッファリングを使用して、あなたが提供することができます

ことをやって PHP's output buffering機能を使用することができます ob_start()

<?php 
function filterOutput($str) { 
    return strtoupper($str); 
} 

ob_start('filterOutput'); 
?> 

<html> 
    some stuff 
    <?php echo 'hello'; ?> 
</html> 
1

を呼び出すときにコールバックを指定することができますバッファがフラッシュされるときに呼び出されるコールバックメソッド:

<?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(); 
?> 

この場合、出力はスクリプトから送信されず、フラッシュの直前にコールバックメソッドが呼び出される直前にバッファされます。

関連する問題