2012-12-16 24 views
10

Web sitemde (drupal ile çalışıyor) ob_flush işlevi uzun bir süre (10 - 100 saniye arasında) yürütülüyor. Nedenini nasıl öğrenebilirim? Bu kadar uzun süre neden olabilir? Sayfanın başında enter image description hereob_flush, yürütülmesi uzun sürüyor

+0

Bu işlevin uygulamanızı dondurduğunu düşündüren nedir? – ualinker

+0

@ualinker Lütfen yüklediğim resme bakın – user16948

+0

Ayrıca ob_start() 've' ob_flush() 'içeriğiyle kod yazabilir misiniz? – ualinker

cevap

0

kullanım

<?ob_start();?> 

ve sayfanın sonunda

<?ob_flush();?> 

, bu sorunu çözmek için.

0

SET php.ini

2

yılında

output_buffering = Off

bu deneyin:

ob_start(); 
//Your code to generate the output 
$result = ob_get_contents(); //save the contents of output buffer to a string 
ob_end_clean(); 
echo $result; 

Benim için hızlı çalıştırılır.

0

[Drupal ile sorunuzu etiketlemek isteyebilirsiniz, çünkü bu bir Drupal sorunu olabileceği düşüncesindedir. Özellikle, arabelleği temizlediğinizde, yazdığınız verileri filtrelemek için bir ton kanca tetikleyen bir dış arabelleğe yazdığınızdan şüpheleniyorum.]

Sorununuzun olduğundan şüpheleniyorum. iç içe geçmiş tamponlar. Drupal, arabellekleri ve arabellekleri her yere yayıyor. sonucunu kontrol edin: bu sadece arabelleğe sonraki en dış tabakası halinde iç tampon içeriğini ekler:

echo "<pre>\nBuffering level: "; 
    . ob_get_level() . 
    . "\nBuffer status:\n" 
    . var_dump(ob_get_status(TRUE)) 
    . "\n</pre>"; 

var ise iç içe tamponları, o zaman ben ob_flush() sizin için bir şey yapmaz şüpheli.

İç içe geçmiş arabellekler, Drupal'ın kendisinden (yukarıdakiler gösterilir) veya zlib-output-compression ve output_buffering ayarlarından gelebilir (bunları ikiye katlamayı deneyin, herhangi bir şeyi değiştirip değiştirmediğine bakın).

senin tamponlar iç içe değildir ve yukarıdaki ayarlar sonra da zaman alıyor hangi bölümünün görmek için, orada profil oluşturucu parçalar halinde çalışmasını bölmek ve çalıştırmak isteyebilirsiniz, yardımcı olmazsa:

$data = ob_get_contents(); // Return the contents of the output buffer. 
ob_clean(); // Clean (erase) the output buffer. 
ob_end(); // Close the buffer. 
echo($data); // Output our data - only works if there's no outer buffer! 
ob_start(); // Start our buffer again. 

Ancak soru, "ne yapmaya çalışıyorsunuz?" Sizce ob_flush() burada ne yapıyor? Çünkü eğer cevap "Şimdiye kadar yaptığım her şeyi tarayıcıya zorlamak istiyorum" ... çünkü o zaman ob_flush() sadece doğru yoldan değil.

İlgili konular