1

CURLリクエストを使用してAPIからデータを取得しようとしています。リクエストの開始から経過した時間を追跡し、しばらくしてからリクエストを停止することは可能ですか?設定されたタイムアウトよりも短い場合がありますか?

ノート:

私の目的は、タイムアウトを設定しないことです。別のジョブ/関数呼び出しが発生しなくなるまで、要求を続行します。出来ますか?

詳細に:

私が正確に望んでいるのは、Ajaxを介して呼び出してからCURLを開始する関数があり、別のAjaxも特定のパラメーターを使用してその関数を呼び出すことです。2回目のajax呼び出しが発生すると、CURLの実行が停止します。ただし、これら2つの呼び出し内の時間間隔は任意です。

4

5 に答える 5

3

これは、cURL転送の設定CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUTオプション(php doc)で定義できます。

于 2012-05-04T06:58:20.363 に答える
1

次のように、 curl_setopt()関数を介してcURLオプションを設定するためにCURLOPT_CONNECTTIMEOUTおよび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);
于 2012-05-04T07:03:35.130 に答える
1

私が正確に望んでいるのは、Ajaxを介して呼び出してからCURLを開始する関数があり、別のAjaxも特定のパラメーターを使用してその関数を呼び出すことです。2回目のajax呼び出しが発生すると、CURLの実行が停止します。

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

于 2012-05-04T07:23:07.043 に答える
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;
          }
于 2012-05-04T07:23:09.747 に答える
-2

次のようなPHPでスクリプトの実行時間を取得する簡単な方法:

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.";
于 2012-05-04T07:01:50.857 に答える