2016-11-25 17 views
0

私は大きなデータベーステーブルを持っているので、電話番号を抽出して列番号を抽出してPOSTに入れて時間を増やす方法はありますか?見つかった行ごとにwhileループでカールを実行するので、助けてくれてありがとう。ループ内でのcURLの使用 - 遅すぎる問題

+5

私たちにあなたの試行を最初に教えてください。 – Farkie

+0

なぜ各行に​​対してリクエストを実行しましたか?結果を収集し、リクエスト配列で** one **リクエストを実行してください...それは多くのperformanterになるでしょう – donald123

答えて

0

CURLを使用する場合は、リモートサーバーとの通信に時間がかかります。単一のCURLリクエストをスピードアップする方法はありません。ただし、リモートWebサイトをすばやくロードできる優れたサービスプロバイダでサーバーがホストされていることを確認する必要があります。

CURLリクエストを並行して実行することで、スクリプトをスピードアップできます。これを行うには、CURL関数を別のPHPファイルに移動します。このファイルでは、コマンドライン引数($ argv)を使用して電話番号をパラメータとして受け取ります。 スクリプトには、データベースをCURL結果で更新するためのコードも含める必要があります。

次に、exec()を使用してスクリプトを呼び出します。たとえば、スクリプトがcheckphone.phpの場合は、次のように呼び出します。

exec('php -f /var/www/include/checkphone.php '.$phoneNumber.' > /dev/null 2>&1 &'); 

完全なディレクトリが用意されています。また、使用:

を/ dev/null 2>

は、システムが稼働して終了するスクリプトを待つ必要はない知っているように。それはcheckphone.phpを実行し、ループを繰り返し続けます。

注意点:数百の電話番号がある場合、これは何百ものプロセスを開き、おそらくサーバーをクラッシュさせるでしょう。一度にいくつかの並行プロセスだけを開くように、マスタースクリプトのコントロールを構築します。これは、引数として送信した電話番号がCURLスクリプトによって追加情報で更新されているかどうかをデータベースに照会することによって実行できます。 また、あまりにも多くのリクエストをリモートサーバーに送信するのが速すぎないことを確認してください。そうしないと、サーバーのDDoSingが終了します。これはno-noです。 必要な情報を提供できる複数のリモートサイトがある場合は、それらの間を反復することを検討してください。

+0

こんにちはIDAN、この非常に詳細な答えをありがとう、今私は非常によくカールの機能を理解して、私は私の私の現在のコードは1回のカールコールを処理するのに2〜3秒かかりますが、あなたが言ったように、さらに加速すれば、それはターゲットサーバを吐き出すでしょう、もう一度、ありがとう、ありがとう。 – Belicoff

0

すべてのリクエストを1つにしてから、1つのリクエストのみを送信します。それは動作するのですか、ターゲットは要求ごとに1つの電話番号だけを受け入れますか?

+0

hi MIRO、はいターゲットはリクエストごとに1つの値しか受け入れないため、処理に2〜3秒かかります – Belicoff