私はからいくつかの行動を見ています、ob_start()
そしてob_end_*()
それは非常に直感に反しているようです。
きちんとした精神で、私のアルゴリズムは次のとおりです。
- バッファを開く
- いくつかのことをする
- バッファを文字列に保存します
- バッファを閉じます
最初のケース以外のループケースごとに、実行時に次の通知が表示されます。
注意:ob_end_clean():バッファーの削除に失敗しました。21行目のC:... \ tests\TestOBError.phpに削除するバッファーがありません
注意:ob_end_clean():バッファーの削除に失敗しました。21行目のC:... \ tests\TestOBError.phpに削除するバッファーがありません
注意:ob_end_clean():バッファーの削除に失敗しました。21行目のC:... \ tests\TestOBError.phpに削除するバッファーがありません
現在のストーリーペイロード:「1つ」。
現在のストーリーペイロード:「2」。
現在のストーリーペイロード:「3」。
現在のストーリーペイロード:「4」。
サンプルコード(TestOBError.php):
<?php
class Story {
public $payload;
public function __construct($payload) {
$this->payload = $payload;
}
}
$stories = array();
$stories[] = new Story('one');
$stories[] = new Story('two');
$stories[] = new Story('three');
$stories[] = new Story('four');
$foo = "";
foreach ($stories as $story) {
ob_start();
require 'TestOBError_Foo.php';
$foo .= ob_get_clean();
ob_end_clean();
}
print $foo;
?>
TestOBError_Foo.phpの内容:
<p>Current story payload: `<?php print $story->payload; ?>'.</p>
出力バッファを誤用しているだけですか?誰かがこれを行うための「正しい方法」を教えてもらえますか?
PHPバージョン5.4.7を実行しています。