Bir "filtre dosyası" aracılığıyla tüm PHP dosyası çıktı geçiş yapma

5 Cevap php

Tüm PHP ve / veya tarayıcınızda görüntülenen önce "süzülmüş" için HTML dosyası çıkış için herhangi bir yolu var mı? Ben görüntülenmeden önce ben genel bir işlevi aracılığıyla geçebileceği düşündüm ama uygulanması üzerinde şaşırıp. Lütfen yardım edin.

Aynı sonucu elde etmek için daha iyi bir yolu varsa, ben bilmek mutlu olurdum.

Teşekkürler.

5 Cevap

Eğer komut çıkış sonrası işlenmesi için bir geri arama işleyici geçmek ob_start Hangi sağlayan göz atın.

Örneğin, PHP dahili bir geri arama ob_gzhandler çıkış sıkıştırılması kullanıma içerir

<?php

ob_start("ob_gzhandler");

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

Burada ile HTML düzen nasıl gösteren dolgun bir örnek tidy extension:

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

Eğer auto_prepend_file yapılandırma yönergesi kontrol, tüm PHP betikleri doğrudan dahil olmadan aynı filtreyi kullanılan sağlamak istedim.

Bunu yapmak için PHP's output buffering işlevlerini kullanabilirsiniz

Eğer tampon gibi kızardı, çağrılan bir geri arama yöntemi sağlayabilir:

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

Bu durumda çıkış tamponlu bir yerine komut dosyası gönderilen ve sadece floş önce geri çağırma yöntemi denir.

Kullanarak bir göz Smarty. PHP için bir şablon sistemi bulunuyor, bu kullanmak iyi bir uygulama olduğunu ve küresel çıkış filtreleri takabilirsiniz içine.

edit: Paul cevap iyidir. Yani olurdu

ob_start("my_filter_function");

Benim orijinal cevap oldu:

Bu output buffering ile elde edilebilir.

Örneğin:

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