2

コマンドラインで実行したい PHP スクリプトがあります。このスクリプトは、とりわけ、PHP と HTML コンテンツの両方を含む PHP ファイルをロードし、そのファイルからレンダリングされた出力を取得する必要があります。

このコードはまさに必要なことを行いますが、コマンドラインから実行した場合はそうではありません:

<?php

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

?>

ブラウザで実行すると、スクリプトは include() を介して PHP ファイルのレンダリングされた出力を取得し、出力を $content に保存します。

しかし、コマンド ラインでこのスクリプトを実行すると、PHP ファイルの内容がエコー アウトされ、$content が設定されません。

ドキュメントを検索しましたが、何も機能していないようです。ini_set('implicit_flush', false) を呼び出しても効果はなく、ob_implicit_flush(0); も効果がありません。

何かご意見は?

4

1 に答える 1

1

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;
于 2011-04-05T18:30:39.513 に答える