PHP Çıktı Tamponlama

3 Cevap

Basit bir soru:

Ben çıktı tamponlama etkinleştirirseniz ...

ob_start();
  $a = true;
  header('Location: page.php'); 
  $a = false;
ob_end_flush();

... $a yanlış olarak tescil edilecek, ya da (çıkış tamponlama etkin değildi olsaydı gibi) sadece komut işleme olmadan yönlendirme sayfası olacak?

Teşekkürler!

3 Cevap

Eğer exit() veya die() başlık yönlendirme sonra, sayfanın geri kalanı (veya tamponlama olmadan) ayrıştırmak için devam ederken bir yanlış olacaktır $ diyoruz sürece.

Eğer özel bir nedeniniz yoksa, header("Location: ..."); her zaman cpu döngüleri veya hafıza atık değil gibi yukarıdaki işlevlerden biri tarafından takip edilmelidir.

Çıktı tamponlama isim çıkarır tam olarak ne yapar, başka bir şey. Bu only çıkışı değil, değişken atama tamponlar veya devlet nesne. Bu durumda $a sağlanan kod örneği sonunda false atanabilir. Bu kod yürütülmesine kadar sonra ne olur.

Bu * komutların kalanını işleme olmadan page.php dosyasında yönlendirme olur.

Özellikle (die, exit) sonra bunu durdurmak sürece * Teknik, yürütme başlık çağrısının geçmiş devam ediyor. Sadece değişkenleri belirleme ve şeyleri göstererek eğer bu fark asla, ama bir veritabanı değiştirmek komutları varsa, o bu değişiklikler nereden geldiğini bulmak çok zor olabilir.