【问题标题】:PHP waiting for correct response with cURLPHP 等待 cURL 的正确响应
【发布时间】:2013-01-06 03:00:24
【问题描述】:

我不知道怎么做。 有一个 XML Api 服务器,我正在使用 cURL 获取内容;它工作正常。现在我必须调用creditCardPreprocessors 状态。它也有“进行中状态”,PHP 应该等到进程完成。我已经尝试过睡眠和其他方式,但我做不到。这是我尝试过的简化示例变体:

function process_state($xml){
  if($result = request($xml)){
  // It'll return NULL on bad state for example
    return $result;
  }
  sleep(3);
  process_state($xml);
}

我知道,这可能是一个无限循环,但我尝试添加计数以在达到 5 时退出;它不会退出,服务器将挂起,我将在几分钟内出现 500 个错误,并且该虚拟主机无法访问 Apache。

编辑:

另一个例子

$i = 0;
$card_state = false;

// We're gona assume now the request() turns back NULL if card state is processing TRUE if it's done

while(!$card_state && $i < 10){
    $i++;
    if($result = request('XML STUFF')){
        $card_state = $result;
        break;
    }
    sleep(2);
}

【问题讨论】:

  • PHP break 对您有什么帮助吗?
  • 我认为你可能因为递归而内存不足
  • 不,尝试过,没有停止,也尝试过退出,根本没有退出。在以请求为条件的睡眠 while 循环中尝试,我不允许它运行 10 次,根本没有退出......
  • @vortextangent 我在这台服务器上有 512mb 的内存限制,不,不要,此时它只发出 10 个请求......即使对于 curl 来说也没有那么多......跨度>
  • 你能发一些request()吗?

标签: php curl sleep


【解决方案1】:

您定义的递归方法可能会导致问题,具体取决于您从服务器返回的响应时间。我想你会想在这里使用一个while循环。它使请求保持序列化。

$returnable_responses = array('code1','code2','code3'); // the array of responses that you want the function to stop after receiving
$max_number_of_calls = 5; // or some number

$iterator = 0;
$result = NULL;
while(!in_array($result,$returnable_responses) && ($iterator < $max_number_of_calls)) {
    $result = request($xml);
    $iterator++; 
}

【讨论】:

  • 试过已经完全一样了。它仍然挂起。一个请求就可以正常工作...
  • @wintercounter 您可能需要查看执行 cURL 调用的代码。它可能不是循环。是关闭 curl 资源还是什么?
  • @wintercounter 你能用那个代码编辑主要问题吗?
  • 这只是一个简单的 curl 请求,仅此而已...但是我添加了另一个不起作用的示例
猜你喜欢
  • 1970-01-01
  • 2013-11-18
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 2020-02-25
  • 2015-05-20
  • 1970-01-01
相关资源
最近更新 更多