【发布时间】:2010-03-26 10:20:11
【问题描述】:
我使用 url 来请求远程 url,这些远程 url 有时可能会非常慢或只是慢下来。 在这种情况下,我的 php 脚本仍在等待响应,这使得 apache 不得不将许多请求留在内存中然后超载。 我需要一种方法来停止 curl 请求或在指定时间过去后停止运行 php 脚本。 我试过declare(),对curl没有意义。 有人知道怎么解决吗?
顺便说一句:CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的作用是什么?
这里是代码示例:
function http($url, $method, $postfields = NULL) {
$ci = curl_init();
/* Curl settings */
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ci, CURLOPT_TIMEOUT, 5);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, 0);
switch ($method) {
case 'POST':
curl_setopt($ci, CURLOPT_POST, TRUE);
if (!empty($postfields)) {
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
}
break;
case 'DELETE':
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
if (!empty($postfields)) {
$url = "{$url}?{$postfields}";
}
}
curl_setopt($ci, CURLOPT_URL, $url);
$response = curl_exec($ci);
$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
$this->last_api_call = $url;
curl_close ($ci);
return $response;
}
我将连接超时和超时设置为 5 秒,但它不起作用。 curl仍然需要很长时间才能完成请求,但是url如果在5s内没有响应,则表示它已关闭或网络状况不佳,应该停止它。
【问题讨论】:
-
设置超时是常见的解决方案。
CURLOPT_TIMEOUT有什么问题?如果您需要帮助,您可能需要添加一些代码和说明什么不起作用。