2012-05-04 11 views
1

CURLリクエストを使用してAPIからデータを取得しようとしています。要求開始から経過した時間を追跡し、いつか要求を停止することは可能ですか?タイムアウトがそれに設定されていない可能性がありますか?CURLリクエストをシャットダウンする

注:

私の目的は、タイムアウトを設定しないことです。別のジョブ/ファンクションコールが発生しなくなるまで要求を続行します。出来ますか?詳細に

私は正確にしたい何が、私はAjaxを経由して、CURL開始呼び出す機能を持っている、そしてときに、第2のAJAX別のAjaxはまた、いくつかの特定のパラメータとその関数を呼び出すことですコールが発生すると、CURLの実行が停止するはずです。しかし、これらの2つの呼び出し内の時間間隔は任意です。

+3

あなたは何か説明していないでしょう...タイムアウトですか? – Amber

+0

あなたが望む値にタイムアウトを設定しないのはなぜですか? – Anigel

+0

@Amber私の目標はタイムアウトを設定しないことです。別のジョブ/ファンクションコールが発生しなくなるまで要求を続行します。出来ますか? –

答えて

1

は、私はアヤックスを通じて呼び出し、CURLスタート機能を持っていることであり、第二AJAX呼び出しがの後、実行を発生したとき、別のAjaxにもいくつかの特定のパラメータを指定して、その関数を呼び出しますCURLを停止する必要があります

JavaScriptコードでこれを行う必要があります。単純に.abort()新しいAJAXリクエストを送信する前に。

+0

@ThierMasterしかし、私は中断がajaxを停止するかもしれないと思うが、それはどのようにPHPで継続的なカールの要求を停止することができますか? –

+0

PHPで 'ignore_user_abort()'を使用していない限り、要求を中止するとスクリプトを中止する必要があります。 – ThiefMaster

3

あなたはそのようにPHPでスクリプトの実行時間を取得する(php doc)のcURL転送のCURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUTオプションを設定

-2

簡単な方法であることを定義することができます

function microtime_float() 
{ 
    list($utime, $time) = explode(" ", microtime()); 
    return ((float)$utime + (float)$time); 
} 

$script_start = microtime_float(); 
// here your curl request start 
.... 

// here your curl request stop 
$script_end = microtime_float(); 

echo "Script executed in ".bcsub($script_end, $script_start, 4)." seconds."; 
+1

それは彼の質問に全く答えません。 – ThiefMaster

+0

私はそれが答えていると思います。 – EGurelli

1

使用しCURLOPT_CONNECTTIMEOUTを使用することができますし、 curl_setopt()経由でcURLオプションを設定するCURLOPT_TIMEOUTの機能は、次のとおりです。

私は正確に何をしたい
<?php 

// create a new cURL resource 
$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); 
curl_setopt($ch, CURLOPT_HEADER, false); 

// The number of seconds to wait while trying to connect. 
// Use 0 to wait indefinitely. 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 

// The maximum number of seconds to allow cURL functions to execute 
curl_setopt($ch, CURLOPT_TIMEOUT, 10) 

// grab URL and pass it to the browser 
curl_exec($ch); 

// close cURL resource, and free up system resources 
curl_close($ch); 
1

は、私はあなたが十分に十分であるかを決定するために使用しているかわからないんだけど、以下はそれのトラックにカールダウンロードを停止します。

curl_setopt($ch, CURLOPT_WRITEFUNCTION, array($ch, "downloader")); 

downloaderだけランダム関数名であることは、それが取りますcurlリソースとファンクション名を使用して、保存された入力を受け渡します。

function downloader($curlHandle,$data) 
     { 
      $data_string .= $data; // Store your data for later. 
      $data_length = strlen($data); // Get length of current chunk 
      return $data_length; // pass it back and keep going. 
      } 

、仮に、あなたがグローバル変数を持っていた場合:あなたあなたは以下を持っているだろう、それが起こることを望んでいないなかったので、もし、それが受け取った長さを返すために持っている、または接続が中断されます「カールを止めてください!」と表示されたあなたは偽のサイズを返し、転送を中止することができます。何かが好きです:

function downloader($curlHandle,$data) 
     { 
      $data_string .= $data; // Store your data for later. 
      $data_length = strlen($data); // Get length of current chunk 
      global $stop_curl; 
      return ($stop_curl) ? "" : $data_length; 
      } 
関連する問題