スクリプトで出力バッファリングをしていて、予期しない動作が発生しました。PHPのfile_put_contentsがregister_shutdown_function()内で期待通りに動作しません
ファイルへの書き込みは、スクリプト内の他の場所でも動作しますが、register_shutdown_function()関数を入力してもそれほど動作しません。
ファイルに書き込む権限がないという警告が表示されます。だから、私が入っていたパスを確認した。明らかに、現在の作業ディレクトリは、シャットダウン機能を開始した瞬間から消えている。
私の質問は、これを解決する方法は特にありません。ご覧のとおり、私はちょうど正しい経路を含んでいました。私の質問は、この期待された行動ですか、もしそうなら、その背後にある論理は何ですか?
私はOSX/MAMP-PROを利用しています。まだ別の箱で試したことがありません。
<?
register_shutdown_function('_lib_bootstrap_end');
ob_start();
_lib_bootstrap_start();
file_put_contents('test1.log','this_one_writes_fine');
function _lib_bootstrap_start()
{
echo getcwd()."\n"; // prints '/Users/macbook/Documents/WWW';
file_put_contents('test2.log','this_one_writes_fine');
}
function _lib_bootstrap_end()
{
global $html;
file_put_contents('test3.log', 'this_one_triggers_warning');
$html[] = ob_get_contents();
$return = implode("\n",$html);
ob_end_clean();
echo $return;
echo getcwd()."\n"; // prints '/';
file_put_contents('test4.log', 'this_one_triggers_warning');
// prints 'Warning: file_put_contents(test4.log): failed to open stream: Permission denied in ob_problem.php on line 24'
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.'test5.log','this_one_writes_fine');
}
?>