На моем веб-сайте (работает с drupal) функция ob_flush
занимает много времени (между 10 - 100 сек.), которая должна быть выполнена. Как узнать, почему? Что может вызвать это так долго?
Ob_flush требуется много времени для выполнения
Ответ 1
Попробуйте следующее:
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;
Он работает быстро для меня.
Ответ 2
использовать
<?ob_start();?>
в начале страницы и
<?ob_flush();?>
в конце страницы, чтобы решить эту проблему.
Ответ 3
SET
output_buffering = Off
в php.ini
Ответ 4
[Вы можете пометить свой вопрос с помощью Drupal, так как это похоже на проблему с Drupal. В частности, я подозреваю, что при сбросе буфера вы пишете внешний буфер, который вызывает тонну крючков, которые будут вызываться для фильтрации данных, которые вы только что записали.]
Я подозреваю, что ваша проблема - вложенные буферы. Drupal действительно любит буферы и буферизирует все по всему месту. Проверьте результат:
echo "<pre>\nBuffering level: ";
. ob_get_level() .
. "\nBuffer status:\n"
. var_dump(ob_get_status(TRUE))
. "\n</pre>";
Если у вас есть вложенные буферы, то я подозреваю, что ob_flush() ничего не сделает для вас: он просто добавляет содержимое вашего внутреннего буфера в следующий внешний уровень буферизации.
Вложенные буферы могут поступать из самого Drupal (что будет показано выше) или из настроек для zlib-output-compression и output_buffering (попробуйте свернуть их, посмотрите, не изменит ли это что-либо).
Если ваши буферы не вложены, и приведенные выше настройки не помогают, вы также можете разделить операцию на части и запустить там профайлер, чтобы увидеть, какая часть занимает время:
$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 no outer buffer!
ob_start(); // Start our buffer again.
Затем возникает вопрос, "что вы пытаетесь выполнить?" Как вы думаете, что здесь делает ob_flush()? Потому что, если ответ "Я хочу нажать все, что я сделал до сих пор в браузере"... тогда я боюсь, что ob_flush() просто не так.