15

次のことはできますか?

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

動作しないようです。ところで、私はPHP5.3.5を使用しています。

4

2 に答える 2

24

使用している SAPI によって異なります。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() に呼び出すことをお勧めします。そのため、関数コードの上ではなく、関数コードの下に書きました。

于 2012-06-02T10:44:27.857 に答える
1

これを確認してください:(ここから)

Note:

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

で確認してくださいgetcwd();

于 2012-06-02T10:40:18.153 に答える