Задать вопрос

Какая может быть причина неполной загрузки страницы с циклом?

Здравствуйте, уважаемые специалисты!
Столкнулся с очень своеобразной проблемой и никак не могу понять, почему происходит следующая ситуация:

Имеется web-сервис для клиентов, который располагается на собственном сервере:
Debian 6 Squeeze 64 bit,
apache2-mpm-itk-2.2.16-6+squeeze12,
php5-5.3.3-7+squeeze19.

На главной странице web сервиса в php выполняются определенные действия (цикл foreach в котором идет вызов curl) при отправке формы. Каждый раз отправляется разное количество данных через post, но всего в цикле не более 20 итераций.
Код выглядит так:
<div>Блок до цикла</div>
<?php
foreach ($_POST['account'] as $account_id) {
    $str = getPage($account_id); // ВЫЗОВ CURL ЧЕРЕЗ ФУНКЦИЮ
}
?>
<div>Блок после цикла</div>


Проблема в том, что каждые 3-4 раза из 10 страница загружается не полностью, и отображается только «Блок до цикла». При этом браузер (любой) показывает, что страница загружена.
Методом «научного тыка» я установил, что если в цикл вставить хотя бы что-то на вывод, то страница начинает загружаться полностью:
<div>Блок до цикла</div>
<?php
foreach ($_POST['account'] as $account_id) {
    echo "\r\n"; // ПРИ ДОБАВЛЕНИИ ЭТОЙ СТРОКИ БЛОК ПОСЛЕ ЦИКЛА ОТОБРАЖАЕТСЯ
    $str = getPage($account_id); // ВЫЗОВ CURL ЧЕРЕЗ ФУНКЦИЮ
}
?>
<div>Блок после цикла</div>


Внутри функции getPage происходит вызов curl, парсинг страницы и логирование. И в первом и во втором случае цикл проходит полностью, в лог (txt файл) идут записи обо всех итерациях.
Отображение ошибок в скрипте включено, «засобаченных» функций (@getPage) нет, время на выполнение скрипта стоит достаточное (1800 сек), памяти выделяется тоже достаточно (1000 мб). Ресурсов сервера на выполнение скрипта точно хватает. Проблема появилась внезапно пару дней назад, до этого все работало. Конфигурация сервера не менялась. Перезагрузка не помогает.
Подскажите, пожалуйста, почему без заброса в буфер любого текста страница отображается в браузере не полностью? Сам подобное вижу впервые, пока проблему решил выводом новой строки в цикле, но хочется понять природу подобного бага.
  • Вопрос задан
  • 2581 просмотр
Подписаться 3 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 2
Попробуйте "профессиональную вставку" заменить на нормальный вывод с помощью echo.
Ответ написан
Комментировать
@ilnile
<?php ob_start();  //Стуртуем буферизацию 
$i=0; 
while($i<10000){ 
    echo $i.'<br>';  //Выводим счетчик 
    ob_flush();        //Отсылаем буфер в браузер 
    flush(); 
    sleep(1); 
    $i++; 
} // while 
ob_end_flush(); ?>

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы