1

重複の可能性:
PHP で閉じられたブラウザー接続を検出する

次のようなものを使用する必要がある場合があります。

set_time_limit(0);

// User is uploading some large data
// ...

// Done uploading, from now on processing must be finished, no matter what
ignore_user_abort(true);

// Process the uploaded data...
while (reading the data) {
    // ...
}

問題は、データベースの同期/クリーンアップを実行できるように、ユーザーがいつブラウザー ウィンドウをキャンセル/閉じるか (まだデータを処理している間) を知る必要がある場合があることです。

について読みましregister_shutdown_functionたが、それは進むべき道ではないようです。シャットダウン通知だけでなく、ユーザーがいなくなったことを示す信頼できるインジケーターが必要です

// Process the uploaded data...
while (reading the data) {
    if (user_closed_window == true) {
        CleanUp();
        break;
    }
}
4

1 に答える 1

0

それはPHPでは不可能のようです。しかし、私はあなたがこれを行うことができると思います:

何らかの方法で操作をコミットせず、操作をバッファに保存するだけです。次に、ユーザーがウィンドウをキャンセル/閉じたかどうかを確認します。これは AJAX を使用して行うことができます。XHTTP リクエストを介して操作を開始し、別のページをユーザーに表示します (おそらくキャンセル ボタンを使用します)。ユーザーが JS+AJAX を介してウィンドウを閉じたかどうかを検出できると思います。操作が終了し、ユーザーがウィンドウを閉じていないか、操作をキャンセルしていない場合は、変更をコミットします。そうでない場合は、単に破棄します。

操作が巨大な場合は、バッチで分割して、ユーザーがジョブ間でキャンセル/終了したかどうかを確認できます。

これはPHPでそれを行うための実行可能な方法だと思います。それが役に立てば幸い。

于 2012-10-27T03:13:14.923 に答える