2016-04-03 7 views
1

スクリプトで出力バッファリングをしていて、予期しない動作が発生しました。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'); 
} 
?> 

答えて

0

行動manual page for register_shutdown_function()に応じて期待されている:いくつかのWebサーバの下にシャットダウン関数内で変更することができますスクリプトの

作業ディレクトリ、例えばApache。

これの背後にある理由はわかりません。

関連する問題