2009-07-22 2 views
5

Gibt es eine Möglichkeit, dass alle meine PHP- und/oder HTML-Dateiausgaben "gefiltert" werden, bevor sie im Browser angezeigt werden? Ich dachte, dass ich es durch eine globale Funktion übergeben könnte, bevor es angezeigt wird, aber ich stecke auf der Implementierung fest. Bitte helfen Sie.Lassen Sie die gesamte PHP-Dateiausgabe durch eine "Filterdatei" laufen, bevor sie angezeigt wird

Wenn es einen besseren Weg gibt, das gleiche Ergebnis zu erzielen, würde ich mich freuen zu wissen.

Danke.

Antwort

14

Überprüfen Sie ob_start, die Sie einen Callback-Handler zur Nachbearbeitung Ihrer Skript-Ausgabe übergeben können.

Zum Beispiel enthält PHP eine eingebaute in Callback-ob_gzhandler zur Verwendung bei der Ausgabe komprimiert:

<?php 

ob_start("ob_gzhandler"); 

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

hier ein vollständigeres Beispiel zeigt, wie Sie Ihre HTML mit den tidy extension ordentlich könnten:

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 

Wenn Sie sicherstellen möchten, dass alle Ihre PHP-Skripte denselben Filter verwenden, ohne ihn direkt einzubeziehen, sehen Sie sich die Konfigurationsrichtlinie auto_prepend_file an.

+0

+1 für eine gute Antwort, ich wusste nicht die saubere Klasse. Ist es eine native Klasse? –

+0

Nein, es ist eine Erweiterung. Installation über PECL, aber oft verpackt für die einfache Installation, z. apt-get installiert php5-tidy auf einer typischen Debian/Ubuntu-Box. –

+0

Sehr gute Antwort, sollte ich hinzufügen, dass zu meinen Websites – T0xicCode

0

Schauen Sie sich Smarty an. Es ist ein Templating-System für PHP, das sich gut verwenden lässt und in das Sie globale Ausgabefilter einbinden können.

0

edit: Pauls Antwort ist besser. So wäre es

ob_start("my_filter_function"); 

Meine ursprüngliche Antwort sein war:

, die mit output buffering erreicht werden kann.

Zum Beispiel:

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

Sie Ausgabepufferung verwenden können und einen Rückruf angeben, wenn Sie ob_start()

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

ob_start('filterOutput'); 
?> 

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

aufrufen können Sie PHP's output buffering Funktionen verwenden zu tun, dass

Sie ein zur Verfügung stellen kann Callback-Methode, die aufgerufen wird, wenn der Puffer gelöscht wird, z. B .:

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

In diesem Fall wird die Ausgabe gepuffert anstatt vom Skript gesendet und kurz vor dem Flush wird Ihre Callback-Methode aufgerufen.

Verwandte Themen