7

リクエストを処理して応答を吐き出すのに数秒かかるサーバーにcurlリクエストを送信しています。私のphpスクリプトは待機していないため、応答に基づくforeachループは0の結果を吐き出していると思います。先に進んでデータを処理する前に、curl トランザクションが完了するのを待つにはどうすればよいですか?

  $curl = curl_init();
  curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  curl_setopt($curl, CURLOPT_USERPWD, "admin:password");
  curl_setopt($curl, CURLOPT_URL, "http://server/r/?dst_user__substr='user'");


  curl_setopt($curl, CURLOPT_VERBOSE, 1);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $ret = curl_exec($curl);
  $result = json_decode($ret,true);

 <<<<I need to wait until transaction is complete here>>>>

  foreach ($result['data'] as $key => $value)
  {
        //process data from $result
  }
4

2 に答える 2

21

curl がブロックされています。つまり、次のことを意味します。

$result = json_decode($ret,true);

foreach ($result['data'] as $key => $value)
{
      //process data from $result
}

まで実行されません:

$ret = curl_exec($curl);

完了です。curl_error() を使用し、curl_getinfo() で HTTP 応答コードをチェックすることで、エラーやその他の問題をチェックできます。

于 2013-11-06T16:37:53.763 に答える
1

これは本当に奇妙です!、あなたが得ているようなことは起こらないはずです。しかし、とにかくこのようにしてみてください..

httpresponse コードを取得してから確認してください...

$curl = curl_init();
  curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  curl_setopt($curl, CURLOPT_USERPWD, "admin:password");
  curl_setopt($curl, CURLOPT_URL, "http://server/r/?dst_user__substr='user'");


  curl_setopt($curl, CURLOPT_VERBOSE, 1);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $ret = curl_exec($curl);
  $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  if($httpcode==200)
  {
  $result = json_decode($ret,true);
  foreach ($result['data'] as $key => $value)
  {
        //process data from $result
  }
  }
于 2013-11-06T16:34:40.127 に答える