2

私のphpスクリプトでは、データをブラウザーに出力してから、関数を実行する前に2秒間sleep()を実行したいと考えています。以下は寝る前にjsonを出力していないようです、誰かアイデアがありますか?

if ($_POST['process'] == '1') {
    // adding stuff to $data here
    }

    echo json_encode($data);
    ob_flush();
    flush();
    sleep(2);
    // Do something else
}
4

2 に答える 2

3

うん、これはあなたがそれをする方法です。基本的に、apacheがファイルの処理を続行している間、接続を閉じてユーザーに応答を返します...

ignore_user_abort(true);
header('Content-Type: application/json');
header('Connection: close');
header('Content-Length: ' . strlen($YOUR_JSON_RESPONSE));

echo $YOUR_JSON_RESPONSE;
flush();

sleep(2);
your_cool_function_to_run();
die();

迅速な応答が必要な、および/または実際に作業を行うのに長い時間がかかる、迅速なajax呼び出しに最適です。

この種のものは慎重に使用するように警告する必要があります...これが発生するたびに、新しいプロセス/スレッドが開かれ、残りのリクエストを処理します。やりすぎると、プロセスが不足します。(設定によって異なります)

于 2012-11-29T17:48:02.287 に答える
0

を閉じSTDOUTて、スクリプトがHTTPクライアントへのデータ送信を完了したことをWebサーバーに通知することができます。

fclose( STDOUT);
于 2012-11-29T17:49:13.837 に答える