2012-06-02 7 views
12

次のことは可能ですか?register_shutdown_functionでファイルに書き込む

register_shutdown_function('my_shutdown'); 
function my_shutdown() 
{ 
    file_put_contents('test.txt', 'hello', FILE_APPEND); 
    error_log('hello', 3, 'test.txt'); 
} 

動作していないようです。 私はPHP 5.3.5を使用しています。この

答えて

19

でそれを確認してください。 documentation page for register_shutdown_function()は、Apacheのような特定のサーバーでは、スクリプトの作業ディレクトリが変更されると述べています。

ファイルが.phpファイル(DocumentRootの)ですが、Apacheサーバ(のServerRoot)のフォルダにどこ書かれてではなく、取得します。

これを防止するには、作業フォルダの変更のようなホットワイヤが必要です。 スクリプトが(最初の数行)の実行を開始したときに、何らかの形で実際の作業フォルダを保存する必要があります。 define()で定数を作成すると、これに最適です。

define('WORKING_DIRECTORY', getcwd()); 

そして、あなたはこのようなシャットダウン機能を一部変更する必要があります。

function my_shutdown() 
{ 
    chdir(WORKING_DIRECTORY); 

    file_put_contents('test.txt', 'hello', FILE_APPEND); 
    error_log('hello', 3, 'test.txt'); 
} 

register_shutdown_function('my_shutdown'); 

この方法では、作業フォルダを瞬時に関数が呼び出され、実際のものに戻って変更されますが、とtest.txtファイルはDocumentRootフォルダーに表示されます。

いくつかの修正:関数が宣言された後にregister_shutdown_function()をコールすることをお薦めします。だからこそ私はの下にの下に関数コードを書きました。

+0

この回答はうまくいきましたか?私はあなたの結果について聞いてくれることを願っています。 – Whisperity

+0

ありがとうございます。遅く更新しました。 – IMB

+0

Apacheのバージョンは重要ですか?関数のドキュメントに関するコメントのいくつかによるとそうだ。私は2つのWebサーバーと1つが動作し、もう1つは動作しません。そうするのは、MacではApache/2.2.24(Unix)です。もう一つはUbuntu 14.04のApache/2.4.9(Ubuntu)ではありません。 –

1

チェック:(hereから)

Note: 

Working directory of the script can change inside the shutdown function 
under some web servers, e.g. Apache. 

は、それはあなたが使用しているSAPIた依存getcwd();