2009-07-22 23 views
5

Có cách nào để tất cả đầu ra tệp PHP và/hoặc HTML của tôi bị "lọc" trước khi được hiển thị trong trình duyệt không? Tôi thấy rằng tôi có thể vượt qua nó thông qua một chức năng toàn cầu trước khi nó được hiển thị nhưng tôi bị mắc kẹt về việc thực hiện. Hãy giúp tôi.Làm cho tất cả đầu ra tệp PHP đi qua một "tệp bộ lọc" trước khi được hiển thị

Nếu có cách nào tốt hơn để đạt được kết quả tương tự, tôi rất vui được biết.

Cảm ơn.

Trả lời

14

Kiểm tra ob_start cho phép bạn chuyển trình xử lý gọi lại để xử lý hậu kỳ đầu ra tập lệnh của bạn.

Ví dụ, PHP bao gồm một built-in callback ob_gzhandler để sử dụng trong quá trình nén đầu ra:

<?php 

ob_start("ob_gzhandler"); 

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

Dưới đây là một ví dụ đầy đủ minh họa làm thế nào bạn có thể sắp xếp gọn gàng HTML của bạn với 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 

Nếu bạn muốn đảm bảo tất cả các tập lệnh PHP của bạn sử dụng cùng một bộ lọc mà không bao gồm nó trực tiếp, hãy kiểm tra chỉ thị cấu hình auto_prepend_file.

+0

+1 để có câu trả lời hay, tôi không biết lớp học gọn gàng. Nó là một lớp học bản xứ? –

+0

Không, đó là phần mở rộng. Cài đặt qua PECL, nhưng thường được đóng gói để dễ cài đặt, ví dụ: apt-get cài đặt php5-gọn gàng trên một hộp Debian/Ubuntu điển hình. –

+0

Câu trả lời rất hay, tôi nên thêm nó vào trang web của tôi – T0xicCode

0

Hãy xem sử dụng Smarty. Đó là một hệ thống templating cho PHP, đó là thực hành tốt để sử dụng, và vào đó bạn có thể cắm các bộ lọc đầu ra toàn cầu.

0

chỉnh sửa: Câu trả lời của Paul tốt hơn. Vì vậy, nó sẽ là

ob_start("my_filter_function"); 

trả lời ban đầu của tôi là:

Đó có thể đạt được với output buffering.

Ví dụ:

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

Bạn có thể sử dụng đầu ra đệm và chỉ định một callback khi bạn gọi ob_start()

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

ob_start('filterOutput'); 
?> 

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

Bạn có thể sử dụng PHP's output buffering chức năng để làm điều đó

Bạn có thể cung cấp một phương thức gọi lại được gọi khi bộ đệm bị xóa, như:

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

Trong trường hợp đó, đầu ra được đệm thay vì được gửi từ tập lệnh và ngay trước khi thực hiện phương thức gọi lại.

Các vấn đề liên quan