2009-07-22 8 views
5

क्या ब्राउज़र में प्रदर्शित होने से पहले मेरे सभी PHP और/या HTML फ़ाइल आउटपुट को "फ़िल्टर" करने का कोई तरीका है? मैंने सोचा कि मैं इसे प्रदर्शित होने से पहले एक वैश्विक समारोह के माध्यम से पारित कर सकता हूं लेकिन मैं कार्यान्वयन पर फंस गया हूं। कृपया मदद करे।सभी PHP फ़ाइल आउटपुट को प्रदर्शित करने से पहले "फ़िल्टर फ़ाइल" के माध्यम से पास करना

यदि एक ही परिणाम प्राप्त करने का एक बेहतर तरीका है, तो मुझे जानकर खुशी होगी।

धन्यवाद।

उत्तर

14

ob_start देखें जो आपको अपने स्क्रिप्ट आउटपुट को पोस्ट-प्रोसेसिंग के लिए कॉलबैक हैंडलर पास करने देता है।

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_start("ob_gzhandler"); 

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

यहाँ किस प्रकार आप tidy extension साथ अपने HTML साफ हो सकता है एक समग्र उदाहरण है:

उदाहरण के लिए, पीएचपी उत्पादन संपीड़ित करने में उपयोग के लिए निर्मित एक कॉलबैक ob_gzhandler शामिल

यदि आप यह सुनिश्चित करना चाहते हैं कि आपकी सभी PHP स्क्रिप्ट्स इसे सीधे फ़िल्टर किए बिना उसी फ़िल्टर का उपयोग करती हैं, तो auto_prepend_file कॉन्फ़िगरेशन निर्देश देखें।

+0

+1 अच्छे उत्तर के लिए, मुझे साफ वर्ग नहीं पता था। क्या यह एक मूल वर्ग है? –

+0

नहीं, यह एक विस्तार है। पीईसीएल के माध्यम से स्थापित करें, लेकिन अक्सर आसान इंस्टॉल के लिए पैक किया जाता है, उदाहरण के लिए एक विशिष्ट डेबियन/उबंटू बॉक्स पर php5-tidy स्थापित करें। –

+0

बहुत अच्छा जवाब, मुझे इसे अपनी वेबसाइटों में जोड़ना चाहिए – T0xicCode

0

Smarty का उपयोग करने पर एक नज़र डालें। यह PHP के लिए एक templating प्रणाली है, यह उपयोग करने के लिए अच्छा अभ्यास है, और जिसमें आप वैश्विक आउटपुट फिल्टर प्लग कर सकते हैं।

0

संपादित करें: पॉल का उत्तर बेहतर है। तो यह होगा

ob_start("my_filter_function"); 

मेरी मूल जवाब था:

output buffering साथ प्राप्त किया जा सकता है।

उदाहरण के लिए:

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

आप उत्पादन बफरिंग का उपयोग करें और एक कॉलबैक निर्दिष्ट जब आप कॉल ob_start()

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

ob_start('filterOutput'); 
?> 

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

कर सकते हैं आप PHP's output buffering कार्यों का उपयोग कर सकते हैं करने के लिए है कि

आप एक प्रदान कर सकते हैं कॉलबैक विधि जिसे बफर फ़्लश किया जाता है, जैसे:

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

उस स्थिति में आउटपुट को स्क्रिप्ट से भेजे जाने के बजाय buffered किया जाता है और फ्लश से पहले आपकी कॉलबैक विधि को बुलाया जाता है।

संबंधित मुद्दे