Ob_flush без удаления буфера - PullRequest
1 голос
/ 15 ноября 2011

У меня есть PHP-скрипт, который занимает несколько минут, чтобы закончить обработку. Пока страница загружается, я хочу показать часть вывода PHP, когда он станет доступным, что можно сделать с помощью ob_start() и ob_flush().

После того, как весь сценарий завершится, я хочу сохранить весь вывод PHP с самого начала в файл HTML. Это можно сделать с помощью ob_start() и file_put_contents("log.html", ob_get_contents());

Проблема: Однако, поскольку мы на этом пути вызываем ob_flush(), окончательный файл, который сохраняется с file_put_contents(), кажется, разделен на разные файлы. Я подозреваю, что это связано с тем, что буфер очищается вызовами ob_start() перед вызовом file_put_contents(), но почему он не просто сохранил вывод между конечными значениями ob_flush() и file_put_contents() в файл, а вместо этого сохранил несколько разных файлов? (могу ошибаться, отдельные частичные файлы могут быть связаны с частичным выполнением скрипта)

Другими словами, как показать вывод PHP при выполнении длинного скрипта и при этом сохранить весь вывод PHP в один файл HTML?

код PHP

// Start the buffering
ob_start();

......

ob_flush();

......

ob_flush();

......

file_put_contents("log.html", ob_get_contents());

Ответы [ 3 ]

3 голосов
/ 15 ноября 2011

Я могу придумать пару способов:

  1. Сохранять переменную (называемую чем-то вроде $ content) и добавлять текущий буфер каждый раз, когда вы вызываете ob_flush ():

    $content = '';
    ...
    $content .= ob_get_contents();
    ob_flush();
    ...
    $content .= ob_get_contents();
    ob_flush();
    ...
    file_put_contents('log.html', $content . ob_get_contents());
    ob_flush();
    
  2. Использовать fopen ():

    $fp = fopen('log.html', 'w+');
    ...
    fwrite($fp, ob_get_contents());
    ob_flush();
    ...
    fwrite($fp, ob_get_contents());
    ob_flush();
    ...
    fwrite($fp, ob_get_contents());
    fclose($fp);
    ob_flush();
    
2 голосов
/ 15 ноября 2011

Вы также можете использовать ob_get_contents() по пути, сохранить его в переменной, а затем в файл и выходной поток ...

1 голос
/ 15 ноября 2011

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

Вы прочитали руководство ?

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