2016-03-26 26 views
0

Denediğim her sunucuda neden bu komut dosyasının benim için başarılı olduğunu bilen var mı? Başa dönmeden önce daha önceki verilere rağmen Google’a başarıyla yönlendirildim.PHP Üstbilgisine Geri Dön Önceki Yazı Önceki HTML ve Yankı Çıkışı mı?

PHP documentation'a göre, çıktıdan sonra başlık eklenmesi başarısız olur ve bir uyarı verir. Ancak, web sunucularımda tutarsız davranışlar görüyorum. Bazı şeyleri gerçekleştirmek için benzer yaklaşımları kullanıyorum ve rastgele bir şekilde çalışmayı durduran bir durum dışında iyi çalıştı.

<?php 
    echo "lol"; 
?> 
<html> 
<?php 
    header("Location: http://www.google.com"); 
    exit(); 
?> 

Peki, anlaşma nedir? PHP'nin son sürümleri şimdi buna izin veriyor mu?

Benim php sürümü Ubuntu 14.04 x64 PHP 5.5.9-1ubuntu4.14 olduğunu

+0

Muhtemelen PHP'nin bazı önbelleğe alma işlemleri (çıkış arabelleği), bu nedenle neden bazen çalışır;) – Miro

+0

PHP, çıktıları varsayılan olarak tümüyle çıkarırsa, istediğiniz zaman üstbilgileri enjekte edebilmeniz güzel olurdu. Gerçi gerçek sebebi bilmek isterim. – OwN

+0

Çıkışı "bekletmek" istiyorsanız, bunun için işlevler vardır: http://php.net/manual/en/book.outcontrol.php. Öte yandan, birçok çıktı için eşzamanlı çıktı çok önemlidir ... – Miro

cevap

0
olarak ayar ile açıklanabilir bu bazıları için izin verir output_buffering benim sunucuda etkinleştirilmiş

:

; Output buffering is a mechanism for controlling how much output data 
; (excluding headers and cookies) PHP should keep internally before pushing that 
; data to the client. If your application's output exceeds this setting, PHP 
; will send that data in chunks of roughly the size you specify. 
; Turning on this setting and managing its maximum buffer size can yield some 
; interesting side-effects depending on your application and web server. 
; You may be able to send headers and cookies after you've already sent output 
; through print or echo. You also may see performance benefits if your server is 
; emitting less packets due to buffered output versus PHP streaming the output 
; as it gets it. On production servers, 4096 bytes is a good setting for performance 
; reasons. 
; Note: Output buffering can also be controlled via Output Buffering Control 
; functions. 
; Possible Values: 
; On = Enabled and buffer is unlimited. (Use with caution) 
; Off = Disabled 
; Integer = Enables the buffer and sets its maximum size in bytes. 
; Note: This directive is hardcoded to Off for the CLI SAPI 
; Default Value: Off 
; Development Value: 4096 
; Production Value: 4096 
; http://php.net/output-buffering 
output_buffering = 4096 

Ugh , php.

+0

Bir iyi yan etki, output_buffering'in betiği daha hızlı yapmasını sağlar, en azından 7.0.4, lol ile sunucumda. –