[PHP-users 8427] 持続処理について

Eiji Nakamura php-users@php.gr.jp
Fri, 5 Jul 2002 15:28:33 +0900


中村と申します。

持続処理について質問させてください。

環境は、RedHat7.2J+Apache1.3.26+PHP4.0.6です。

ignore_user_abortをtrueにしてクライアントとの接続が断になった場合でも、
スクリプトを完了させたいのですが、ignore_user_abortをtrueに設定しても、
スクリプトが破棄されてしまっているようなのです。
試しに、下記のようなスクリプトで実験してみたのですが・・・、

ignore_user_abort(true);
for ($i = 0 ; $i < 10 ; $i++)
{
    print("$i\n");
    flush();
    sleep(2);
}
$fp = fopen("./aaa.txt", "w");    //for debug
fputs($fp, "completed!!");            //for debug
fclose($fp);                            //for debug

ダウンロード終了まで待つと当然ファイルに書き込まれるのですが、
ダウンロードの最中に”中止”ボタンを押して、相当(上記だと20秒程度)待って
ファイルの存在を確認しても、
そこにはファイルが見当たらないのです。

register_shutdown_functionも試して見ました。

function q()
{
    $fp = fopen("./bbb.txt", "w");    //for debug
    fputs($fp, "aborted!!");            //for debug
    fclose($fp);                            //for debug
}

register_shutdown_function("q");

for ($i = 0 ; $i < 10 ; $i++)
{
    print("$i\n");
    flush();
    sleep(2);
}
$fp = fopen("./aaa.txt", "w");    //for debug
fputs($fp, "completed!!");            //for debug
fclose($fp);                            //for debug

結果、やはり、ダウンロード終了まで待つと、"aaa.txt"と"bbb.txt"は存在するので
すが、
ダウンロードの最中に”中止”ボタンを押しても、"bbb.txt"は存在しません。

これは何がおかしいのか、それとも持続処理に関する私の完全な勘違いなのか、
おわかりの方がいらっしゃいましたら、ご教授ください。
よろしくお願いいたします。