4

2つのPHP関数があるとしましょう。

function first()
{

     $keyword = $this->input->post('keyword');

     //search for the result and show it to users.
     $this->search->search($keyword);

     //send the keyword to save it into the db.
     $this->second($keyword);
}


function second($keyword)
{
      //saving a search keyword in the db
}

できるだけ早く結果を送信し、検索語をDBに保存したいと思います。

ただし、特定の時間の後で2番目のスクリプトを実行したいと思います。

検索結果をできるだけ早く顧客に届けたいからです。

ユーザーが最初のPHPスクリプトを実行した後に2番目のPHPスクリプトを実行する方法はありますか?

* I don't want to use Cron Job
* I wanna run those two script separatly. 
* don't want to use sleep because it will stop the first script for certain times.
4

3 に答える 3

3

サーバーにルーティングする必要がありますが、この非同期phpアプローチは非常にうまく機能します(私は約1年間、あなたがしているように見えることをほぼ正確に実行するために使用しています)。

参照:PHPコードを非同期で実行する方法

于 2012-07-02T18:10:09.863 に答える
1

Bob Daviesが提案したように、PHPからWebリクエストを行う代わりに、ページが表示された後、htmlページから新しいHTTPリクエストを開始します。

例えば:

  1. クライアントがHTTPリクエストを行う(検索)
  2. サーバーはデータを取得し、結果をエンドユーザーに返します
  3. 結果のHTMLには、ブラウザがhtmlをレンダリングするときに別のリクエストを開始する<img src = "empty.gif?searchterm =mysearch"/>などのスニペットが含まれます。
  4. 別のリクエストがサーバーに到達したら、検索をDBに保存できます

同様の方法を使用して、たとえば、エンドユーザーがメトリクスを待つ必要がない場合のクライアント追跡を行います。いくつかのポイント:

  • 理解、実装、デバッグは非常に簡単ですが、(私の意見では)サーバー側でHTTPリクエストを実行することはできません。
  • よりスケーラブルです
  • JavaScriptをオンにする必要はなく、HTMLをレンダリングするブラウザだけです。
  • ターゲットは、エンドユーザーだけがWebサーバーからアクセスできる必要のない任意のサーバーにすることができます。
于 2012-07-02T18:19:15.713 に答える
0

私の知る限り、PHPを使用したい場合は、を使用できますがsleep()、コードの実行が遅れます。

仕事を遅らせる最も簡単な方法はAJAXを使うことだと思います。2番目の関数を別のPHPドキュメント内に配置し、XMLHTTPRequest()または$.ajax(jQueryを使用する場合)を呼び出して、コードを数秒間遅らせるだけです。setInterval()、またはdelay()(jQuery)を使用してこれを行うことができます。

単に書く

delay(2000).function(){
    //saving a search keyword in the db
}

ここでは、PHPコードではなくAJAXを使用する必要があることに注意してください。

于 2012-07-02T18:16:35.923 に答える