PHP показывает вывод foreach на экран для каждого элемента - PullRequest
3 голосов
/ 29 июля 2009

Одна вещь, которую я заметил с php, это то, что ничего не выводится на экран, пока скрипт не перестал работать. Для проекта, над которым я работаю, я добавляю список из более чем 100 элементов, и он выполняет HTTP-запрос для каждого элемента, а после завершения показывает страницу со статусом каждого элемента, неудачей и т. Д.

Что я хочу знать, так это то, есть ли способ вывести результаты каждого цикла 'foreach' по мере их появления? Таким образом, пользователь, смотрящий на экран, видит магию, происходящую по одной строке за раз или после, скажем, 5 строк.

Я когда-либо видел, чтобы это делалось только с запросами типа Ajax, возможно, вместо этого я должен искать это? Может кто-нибудь указать мне на функцию php, которая делает это или это невозможно?

Ответы [ 4 ]

7 голосов
/ 29 июля 2009

flush() должен сделать это, или вы можете посмотреть все функции буферизации вывода

6 голосов
/ 29 июля 2009

Может быть лучше сохранить все выходные данные скрипта в буфере, а затем очистить буфер при необходимости.

Например:

<?php

if (ob_get_level() == 0) ob_start();

$test = Array('one','two','three','four');
foreach ($test as $key=>$val)
{
    echo $test;
    ob_flush();
    flush();
}

ob_end_flush();

?>

Убедитесь, что у вас отключен mod_gzip!

2 голосов
/ 29 июля 2009

Используйте команду flush()

1 голос
/ 29 июля 2009

Я использую

flush(); @ob_flush();

после выхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...