0

ユーザーがphpスクリプトの出力を待つ必要がなく、スクリプトがサーバー上で実行されている間にページにリダイレクトされる方法を見つけたいと思います。

基本的に、ユーザーは処理に非常に時間がかかるフォームを送信します。フォームが処理されており、その出力が後で利用可能になることを通知するページにユーザーをリダイレクトしたいと思います (出力が表示されたときにタブを開くことを考えました)。準備)。

基本的に私はこのようなものを望んでいますが、私は成功しませんでした。

if ($form_valid) {
   process_form(); // this would need not to be running on the current page so that the user don't have to wait for it to be ready (timeout problems)
   header('Location: http://example.com/form_submitted_output_coming_soon.html');
}

あいまいすぎないことを願っています。

どうすればそれができるかについての助け/アドバイスを事前にありがとう.

4

3 に答える 3

1

この種の問題を解決するための最良のアプローチは、AJAXを使用してバックグラウンドでサーバーにリクエストを送信し、処理が終了したらユーザーを更新することです。

于 2012-10-15T07:58:38.177 に答える
1

非同期リクエスト(ajax)を使用してフォームを送信し、javascriptを使用してページを転送することもできます。このようにして、フォームは非同期で処理されます。回答が得られたら、応答がユーザーに通知されるのを待つこともできます。この非同期リクエストはUIをブロックしません。

完全を期すために、本当にこれだけにphpを使用したい場合は、次のようにします。PHP タスクを非同期で実行する

于 2012-10-15T07:59:48.337 に答える
1

それが秒の場合、スクリプトの実行にかかる時間に本当に依存します.10未満の場合、ajaxリクエストを実行し、モーダル進行状況メッセージを表示します

時間がかかる場合、私のアプローチは、既存のタスクスケジューラ/レポートジェネレータを作成または使用することです

  • 中央管理スクリプトを呼び出す単一のシステム スケジュール タスク エントリ (おそらく最適ではありません)
  • 実行するタスク/レポートをマークします
  • 同時実行。カウント、現在実行中の数を制限します(サーバーに過負荷をかけないようにします)
  • ユーザーは、タスク/レポート用に ajax を介してプールするか、Web ソケットを使用してクライアントにプッシュします

PHP をバックグラウンドにフォークする方法の例

アップデート

ボットから継続的にデータベースまたはファイルをチェックして、実行する作業を行い、結果をデータベースに送信することで、パフォーマンスが向上すると思います。必要な作業が完了/更新されたときに、ajax、Web ソケット、または電子メールを介してユーザーに警告します。

これは、 phpでWebクローラーを構築する方法に関する良い紹介です

于 2012-10-15T08:04:32.160 に答える