Буферизация PHP-вывода в командной строке - PullRequest
2 голосов
/ 05 апреля 2011

У меня есть скрипт PHP, который я хочу запустить в командной строке.Этот скрипт, помимо прочего, должен загрузить PHP-файл, содержащий как PHP, так и HTML-контент, и получить отрисованный вывод из этого файла.

Этот код делает именно то, что мне нужно, но не при запуске из командной строки:

<?php

// ...
if(file_exists($content_file)) {
  ob_start();
  include($content_file);
  $content = ob_get_contents();
  ob_end_clean();
}

?>

При запуске в браузере мой скрипт получает отрендеренный вывод файла PHP через include() и сохраняет выходные данные в $ content.

Однако, когда я выполняю этот сценарий в командной строке, содержимое файла PHP выводится на экран, и $ content никогда не устанавливается.

Я искал документацию, но, похоже, ничего не работает.Вызов ini_set ('implicit_flush', false) не имеет никакого эффекта, равно как и ob_implicit_flush (0);

Есть мысли?

1 Ответ

1 голос
/ 05 апреля 2011

Я не могу продублировать эту проблему, используя PHP 5.3.

[charles@lobotomy ~]$ cat includeme.php
<?php

echo "Oh hi!\n";
?>
I am an include!

[charles@lobotomy ~]$ cat includehim.php
<?php

$content_file = './includeme.php';

if(file_exists($content_file)) {
  ob_start();
  include($content_file);
  $content = ob_get_contents();
  ob_end_clean();
}
[charles@lobotomy ~]$ php includehim.php
[charles@lobotomy ~]$

И в интерактивном режиме:

[charles@lobotomy ~]$ php -a
Interactive shell

php > $content_file = './includeme.php';
php > if(file_exists($content_file)) {
php {   ob_start();
php {   include($content_file);
php {   $content = ob_get_contents();
php {   ob_end_clean();
php { }
php >
php > echo $content;
Oh hi!
I am an include!

php > exit;
...