2

PHP を使用してバックグラウンドで実行されるジョブを作成する方法について、多くの調査を行いました。

 <?php
   ignore_user_abort(true); // run script in background 
   set_time_limit(0); // run script forever 

   // get the size of the output
   ob_start();
   include_once '';//many includes
   //$contentLength = ob_get_length();
   // these headers tell the browser to close the connection
   // once all content has been transmitted
   //header("Content-Length: $contentLength");
   header('Connection: close');
  // flush all output
  ob_end_flush();
  ob_flush();
  flush();

  // close current session
  if (session_id()) session_write_close();


 //lot of code, fetch query from DB with millions records and do calculations

  ?>

header("Content-Length: $contentLength"); を使用する場合 スクリプトは何も返しません。コメントすると、制限を使用して数千の結果が得られます。何百万ものすべてを取得したい場合、サーバーはわずか 3 ~ 4 分後に応答を停止します

膨大な統計レポートを取得する必要があるだけで、ユーザーに最大実行時間に達したというメッセージを表示させたくありません。制限時間が不明なので、時間実行制限を上げたくありません。最大で 1 時間かかる場合があります。バックグラウンドで実行する必要があります。

4

1 に答える 1

1

私のアプローチは、レポートをスニペット、つまり一度に 10000 行で処理することです。計算された各部分をファイルとして保存し、すべてのファイルを結合してから出力します。Ajax 経由でスニペットの処理/作成機能を呼び出す必要があります。この方法では、1 つのユーザー エクスペリエンスを作成しますが、サーバー上で複数のタスクを作成します。その後、進行状況を表示して、ユーザーが何が起こっているかを知ることができ、転倒したかどうかを確認することもできます。

于 2013-02-26T08:28:25.653 に答える