PHP'nin ob_start sonra bir kez daha denilebilir mi?

2 Cevap

Can PHP's ob_start be called more then once?

Bu aptalca bir soru ama ben gerçekten bilmiyorum özür dilerim.

Sitem (dosya miktarı) gerçekten büyük, onun bir sosyal ağ ve içerdiği dosyaların bir şey için PHP'nin çıktı tamponunu ob_start kullanır, ben başka birisi uzun zaman önce siteme başladı ure değilim ve şimdi ben gerek benim Daha tam olarak ne yaptığını görmek için içine bakmak.

Neyse ben ("ob_gzhandler") ob_start kullanmak isteyen; Sitemde CSS dosyaları ve tüm dosyaları sıkıştırmak için ben kullanmak mümkün duyuyorum eğer öyleyse ben bilmek isteyen am indeks dosyası aracılığıyla (dahil) yüklü olsun o kodu başka bir yerde zaten kullanımda olsa bile?

2 Cevap

Evet, birden fazla kez çağırabilirsiniz. Ancak yeni bir tampon her zaman yaratır, bu yüzden dikkatli olun.

Kimden manual: başka ob_start () aktif iken "Çıktı tamponlar) Eğer (ob_start çağırabilir, yani istiflenebilir Sadece () kez uygun sayıda ob_end_flush çağrı emin yaparsanız birden.. çıkış arama fonksiyonları çıkışı yuvalama sırayla her biri sıralı olarak filtre edildiği, aktif. "

Bunu söylemek:

I am wanting to use ob_start ("ob_gzhandler"); to compress CSS files

Ben oldukça PHP değil hizmet ve JS / CSS (iyi, statik) dosyaları Web sunucusuna (yani, Apache) işidir sıkıştırarak, ve olacaktır.

O konuda, size mod_deflate göz atabilirsiniz - en azından, Apache 2 kullanıyorsanız.

all files on my site get loaded (included) through the index file

Is that really necessary ? You're having PHP work with no apparent (?) reason, that way.
(Note that even if CSS/JS files are served through PHP, Apache should be able to compress them with mod_deflate ; same is also true for HTML, JSON, ... btw)

Sunucu PHP ile bu dosyaları gitmiyor diğer avantajı (yeterli, aslında büyürse) artacak sitenize olarak, başka bir sunucu tarafından onlara hizmet almak için daha kolay olurdu olduğunu:

  • PHP sayfaları işlemek için, "PHP sunucuları" bir grup olabilir
  • ve sunucu bir veya iki "statik dosyaları sunucuları", yalnızca CSS / JS / images ve yük veya "uygulama sunucuları" hafifletmek; Bu olanlar üzerinde PHP için gerek; Ayrıca Apache yerine lighttpd gibi bir şey kullanabilirsiniz


That being said,
ob_start says this :

Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active. Just make sure that you call ob_end_flush() the appropriate number of times. If multiple output callback functions are active, output is being filtered sequentially through each of them in nesting order.

Yani, ben sorunuzun cevabı "evet" :-) olduğunu düşünüyorum