在我的代码中,我使用curl_exec
向另一个页面发送请求。对于脚本的其余部分,我不需要curl_exec
结果,在curl_exec
请求完成并收到响应之前,我不希望它被阻止。
如果我可以分享脚本的特定部分,是否有任何想法?
或任何其他设计理念......?
答案 0 :(得分:2)
以下是一些想法:
或者:
答案 1 :(得分:1)
您是否需要cURL请求的回复?
首先,你需要fork的pcntl函数通常是一个坏主意。
一种方法是将cURL代码放在一个单独的脚本中,然后exec()该脚本使其在后台运行。
$command = "php ..../wherever/your/kohana/cli/controller/is.php";
exec('php /path/to/curlscript.php > /dev/null &');
输出到/ dev / null&允许脚本继续在后台运行。
或者,可能更好的解决方案是实现一个队列系统,如Gearman或RabbitMQ。
答案 2 :(得分:0)
看看curl-multi-exec,可能就是您所需要的:
答案 3 :(得分:0)
PHP不支持forks和线程,但您可以通过设置响应超时来消除响应:
function curl_post_async($url, $params)
{
foreach ($params as $key => &$val) {
if (is_array($val)) $val = implode(',', $val);
$post_params[] = $key.'='.urlencode($val);
}
$post_string = implode('&', $post_params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'curl');
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$result = curl_exec($ch);
curl_close($ch);
}
取自:How to post an asynchronous HTTP request in PHP
作为CURL documentation,您可以使用自PHP 5.2.3和CURL 7.16.2以来的CURLOPT_TIMEOUT_MS
。