php的curl设置超时,在PHP中设置Curl的超时

Simon East..

30

这有一个怪癖可能与某些人有关......来自PHP文档的评论.

如果你想卷曲在不到一秒钟的超时时间,你可以使用CURLOPT_TIMEOUT_MS,虽然对"类Unix系统"的错误/"特性"导致的libcurl与错误"卷曲立即超时如果值为<1000毫秒错误(28):达到超时".这种行为的解释是:

"如果libcurl构建为使用标准系统名称解析器,那么传输的那部分仍将使用全秒分辨率进行超时,允许的最小超时时间为1秒."

这意味着到PHP开发人员是"没有首先测试它无法使用此功能,因为你不能告诉我们,如果libcurl的是使用标准的系统名称解析(但可以肯定它是)"

问题是在(Li | U)nix上,当libcurl使用标准名称解析器时,在名称解析期间会引发SIGALRM,而libcurl认为这是超时警报.

解决方案是使用CURLOPT_NOSIGNAL禁用信号.这是一个示例脚本,它请求自身导致10秒延迟,以便您可以测试超时:

if (!isset($_GET['foo'])) {

// Client

$ch = curl_init('http://localhost/test/test_timeout.php?foo=bar');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_NOSIGNAL, 1);

curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);

$data = curl_exec($ch);

$curl_errno = curl_errno($ch);

$curl_error = curl_error($ch);

curl_close($ch);

if ($curl_errno > 0) {

echo "cURL Error ($curl_errno): $curl_error\n";

} else {

echo "Data received: $data\n";

}

} else {

// Server

sleep(10);

echo "Done.";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值