2017-06-02 7 views
0

私はCURLで最初にコールして約2-3分かかるデータを取得する外部スクリプトを呼び出す必要があります。 CURLを使用して他の外部呼び出しを行い、最初の呼び出しの進行状況を取得します。しかし問題は、最初のCURLの返信が来るまで待つことです。私もcurl_multiをチェックしましたが、それは最初の呼び出しが進行中のときにたくさんの呼び出しをしたいので、それは私を助けていません。だから誰でも私がそれを解決するのを助けることができます。他のカールコールがPHPで既に進行中のときに他のカールを実行する

答えて

1

私は、CURLを追跡するために2回目の呼び出しをする必要がないと仮定進捗。 CURLオプションCURLOPT_PROGRESSFUNCTIONをコールバック関数とともに使用することで、同じ結果を得ることができます。

コールバックメソッドは、5つの引数を取ります。

  1. cURLリソースを
  2. バイトの
  3. 数はこれまでにダウンロードしたことが予想バイトの
  4. 総数をダウンロードすることが予想バイトの
  5. 総数アップロード済み
  6. アップロードされたバイト数

コールバックメソッドでは、ダウンロード/アップロードされた割合を計算できます。以下に例を示します。

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://stackoverflow.com"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progress'); 
curl_setopt($ch, CURLOPT_NOPROGRESS, false); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$html = curl_exec($ch); 
curl_close($ch); 

function progress($resource,$download_size, $downloaded, $upload_size, $uploaded) 
{ 
    if($download_size > 0) 
     echo $downloaded/$download_size * 100 . "%\n"; 
    sleep(1); 
} 
+0

申し訳ありませんが、これは何かdiffです。これは私がしたいカールの進歩ではない、私は最初のカルは私が確かに2番目の呼び出しを行う必要が表示するためにパーセンテージが必要な何かのための計算を行いたいです。それで私はそれを行うことができる方法はありますか? –

+0

こんにちは@Dileep私はあなたに尋ねたアプローチを試みましたが、今では同様のタイプの問題に遭遇しました。ここで私はセッション内の進行状況を格納し、他のajax呼び出しではフェッチしようとしましたが、他のajaxコールは、Curlコール全体が終了するまでハングします。これに対する解決策はありますか? –

+0

こんにちは@Savan ajaxベースの進捗状況の監視については、http://www.binarytides.com/ajax-based-streaming-without-polling/で説明しています。リクエストの進行状況を示すために、送信された要求は1つだけであり、出力はチャンクされています。この場合、コールバックメソッドはチャンク出力を生成します。 –

0

はこれを行う方法があります - 以下のリンクを参照してください、彼らはこの使用curl_multi_initを行う方法について説明しますphp.net curl_multi_inithttp://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/

+0

あなたは正しく表示されますが、これは違います。私の場合。ここでは、すべてのリクエストをまとめてコールカールを追加します。しかし、私の場合、私は最初のカールを時間を要するアヤックスで呼ぶ必要があり、この間に、応答インスタントを得ることができるアヤックスで他のカールを呼び出さなければならず、最初のコールが完了するのを待つべきではありません。だから私の場合は2 diffがあります。実際のところ問題であるコールが必要です。 –

+0

まあ、PHPは実際には複数のスレッドを扱うようには設計されていません... –

+0

PHPで行う方法は他にありません。 –

関連する問題