-1

私はこのように動作するPHPプログラムを持っています

  1. ユーザーが画像をアップロードする
  2. 画像が処理されます
  3. 他の時間のかかる関数は
  4. アップロードの確認がユーザーに送信されます。

問題は、項目2と3に多くの時間がかかることです。これらのプロセスを非同期で実行するように延期するにはどうすればよいですか?

画像がアップロードされた直後にプロセスの実行を開始したいのですが、それでも他のことを続けて、待たないでください。

cronについては知っていますが、タスクをスケジュールする必要はありません。タスクが完了するのを待つ必要はありません。

私のオプションは何ですか?

編集

明確にするために、このプロジェクトはサーバー側のみです。javascriptオプションはありません。

4

3 に答える 3

2

まず、タスクを並べ替えることをお勧めします。

  1. ユーザーが画像をアップロードする
  2. アップロードの確認がユーザーに送信されます。

  3. 画像が処理されます

  4. 他の時間のかかる関数は

次に、次のオプションがあります。パート3と4を延期する方法です。

オプション1:ステップ2でユーザーに確認を送信し、ignore_user_abort()画像の処理を続行して使用します(ユーザーには「ページの読み込み中」メッセージが表示されるため、最適ではありません。

オプション2:IBPスタイル。手順1〜2を実行してから、ある種のデータベースに処理ジョブを追加します。ランダムにユーザーに画像を表示します。画像は実際にはignore_user_abort()、アイテムのキューを実行および処理するphpスクリプトにリンクしています。

オプション3:オプション2と同じですが、画像を表示しません。代わりに、cURLなどを使用してサーバーを所有するように要求する必要があります。アイデアは、リクエストを開始し、リクエストが終了するのを待たずに、メインスクリプトの実行を停止することです。

オプション4:5〜15分ごとに開始するcronスクリプトを開始し、必要なタスクを実行します。また、バックグラウンドで24時間稼働し、タスクのチェックの合間に20秒間スリープすることもできます。このオプションは、比較的忙しいWebサイトがある場合に最適です。

オプション5:キューにタスクを追加した後、exec()やshell_exec()などを実行して、バックグラウンドで処理スクリプトを台無しにしてみてください。

オプション2と3の実行方法の例: 非同期PHP呼び出し? PHPで非同期GETリクエストを行うにはどうすればよいですか?

于 2012-10-24T09:54:06.577 に答える
2

必要に応じてコードを 2 つに分割し、時間のかかるロジックを別のスクリプトに分割しますtimeConsumer.php次に、 pcntl-fork()を使用して子プロセスを作成し、その中で実行できますtimeConsumer.php

exec()または、ドキュメントにリストされている他の可能な方法を使用することもできます。Unix/Linux システム&では、コマンド文字列の最後に を追加して、プログラムがバックグラウンドで実行されるようにすることができます。

アップロードされtimeConsumer.phpた画像の名前をコマンド ライン パラメータとして渡すことができます。これは、グローバル変数を通じてアクセスできます$argv。(これは配列です)

于 2012-10-24T09:55:33.957 に答える
-2

これにはajax/jqueryを使用する必要があります。画像をアップロードした後、これを呼び出します。打撃を参照してください。

$.ajax({
     url: 'process.php',
     type: 'post',
     success: function(data) {

          //this is triggered when 2 and 3 is done.

     }


});
于 2012-10-24T09:40:37.687 に答える