Codeigniter 2.x - эхо-вывод при работе скрипта

Я пытался заставить codeigniter выводить текст, поскольку скрипт работал, но не мог заставить его работать. У меня есть поиск здесь и Google, и я видел использование ob_end_flush(); и смыть(); а также вместе с добавлением дополнительных байтов, чтобы браузер мог выводить. Но ничего из этого не работает в CI 2.x. Если кому-то повезло с этим, заранее спасибо

я пытался

function test()
{
    ob_end_flush();
        echo "test1";
    ob_start();
    sleep(3);
    ob_end_flush();
        echo "test1";
    ob_start();
    sleep(3);
    ob_end_flush();
        echo "test1";
    ob_start();
}

Без везения. Скрипт ждет 6 секунд, а затем выдает все сразу. Я хотел бы, чтобы он выводил вывод на экран, затем ждал 3 секунды, затем выводил следующее эхо, затем ждал еще 3 секунды и т. д.


person William    schedule 22.04.2011    source источник
comment
Не видя вашего кода, как это можно решить? С дикой догадкой я скажу, попробуйте ob_get_clean(), но все же у меня есть около 1% идеи, с чем у вас проблемы. Опубликуйте свой фактический код и найдите время, чтобы четко объяснить свою проблему и показать, что вы пробовали и, в частности, что не работает.   -  person Wesley Murch    schedule 22.04.2011
comment
Это сработало для меня в codeigniter - stackoverflow.com/a/4978809/2083877   -  person Sunil Kumar    schedule 07.03.2019


Ответы (3)


Я попробовал это сегодня, и это тоже не сработало. Затем я посмотрел на выходной класс ядра и обнаружил приватную функцию _display(). Я понял, что вывод собирается до того, как он отображается в какую-то переменную, а затем, наконец, вызывается эта функция. Итак, перед моим кодом в методе контроллера я добавил эту строку:

$this->output->_display("");

а затем запустил код. Это сработало. Таким образом, ваша измененная функция будет выглядеть так:

function test()
{
    $this->output->_display("");
    ob_end_flush();
        echo "test1";
    ob_start();
    sleep(3);
    ob_end_flush();
        echo "test1";
    ob_start();
    sleep(3);
    ob_end_flush();
        echo "test1";
    ob_start();
}
person Taha Paksu    schedule 24.03.2012

Проблема, с которой вы столкнулись с Code Igniter, заключается в том, что буфер вывода уже действует. Предшествующий тесту следующий фрагмент избавит вас от буферизации на уровне php, по крайней мере:

// try to bust out of output buffering
while(ob_get_level()) {
    ob_end_flush();
}
ob_end_flush();

Как отметил @Wesley, это все еще может быть подорвано конфигурацией вашего сервера, но в моей текущей настройке я могу передавать вывод обратно после отключения всех выходных буферов.

person Jerry    schedule 13.02.2013

проверьте API вашего сервера с помощью

echo phpinfo();

если вы нашли свой сервер api

Server API :  CGI/FastCGI

в CentOS добавьте строку ниже в "/etc/httpd/conf.d/fcgid.conf"

OutputBufferSize 0

Перезапустите сервер Apache и попробуйте приведенный ниже код.

ob_start();
for($i = 0; $i < 10; $i ++) {
        echo $i;
        echo '<br />';
        flush();
        ob_flush();
        sleep(1);
    }
person gsm    schedule 05.12.2016