PHP önce yankılandı öğeleri silmek için nasıl

5 Cevap php

Php, kaldırmak / tüm önceden yankılandı veya basılı öğeleri silmek için herhangi bir yolu var mı?

Örneğin:

<?php

echo 'a';
print 'b';

// some statement that removes all printed/echoed items

echo 'c';

// the final output should be equal to 'c', not 'abc'

?>

Benim komut dosyası içerir fonksiyonunu kullanır. Dahil dosyalar şey echo gerekiyordu değildir. Birisi (ex = korsan) çalıştığında sadece durumda, ben kaldırmak için bir yol gerekir.

5 Cevap

<?php

ob_start();
echo 'a';
print 'b';

// some statement that removes all printed/echoed items
ob_end_clean();

echo 'c';

// the final output is equal to 'c', not 'abc'

?>

Output buffering functions

Çıktı tamponlama işlevleri aynı zamanda sadece, yani dizeleri dönmek için baskı işlevleri zorlamak için hackery yararlıdır.

<?php
ob_start();
var_dump($myVar);
$data = ob_get_clean();
// do whatever with $data
?>

@ monoksit doğru ise, onun daha iyi, aynı yapmanın daha sezgisel yollar bulmak. örneğin:

<?php
$val_to_print = $a;
if( $need_to_change==true ) 
    $val_to_print = $b;
// when you are sure you won't have to change again...
echo $val_to_print;
?>

Alkış,

JRH

İdeal olarak, Eğer sonuçta istediğiniz yazdırılmış yok çıkış şey olmamalıdır. Daha az hayal kırıklığı için sunum ayrı mantık tutun.

Söyleniyor, PHP içinde Output Buffering seçenekleri danışabilirsiniz.

Bu hata ayıklama çıktı ve program durum bilgisi ise belki trigger_error sen gibi, ne gerek yakın olabilir endişe:

trigger_error ("Attempting to load report #{$report_id}.", E_USER_NOTICE);

Script üretimde olduğu zaman genelde engelli ya da giriş olarak herhangi bir hata göstermek alışkanlık. Oldukça die () kullanarak daha E_USER_ERROR ile ölümcül hataları bu şekilde yapmak için de en iyisidir.

ob_start ();
require ($filename);
$html = ob_get_clean ();

Yukarıda da bir dosya içerir ve bir içeriklerini dize olarak verecektir.

İhtar: tampon pinekledin de hata ayıklama (potansiyel) bir kabus yapma, yukarı atılan herhangi bir hata iletileri hendek olacaktır.

Bir hacker sitesini PHP dosyasına erişime sahiptir diyelim, o da çıktı tamponunu temizleyerek deyimini kaldırmak mümkün olacak.

Eğer kullanıcılar PHP betikleri yüklemek icar çünkü bu yapıyorsanız, bana bu son derece kötü bir fikir olduğunu size söyleyeyim.

Her iki durumda da, 0 güvenlik ekler için ne soruyorsun yapıyor.