分叉php代码的一部分
在我的代码中,我使用分叉php代码的一部分,php,multithreading,curl,fork,Php,Multithreading,Curl,Fork,在我的代码中,我使用curl\u exec向另一个页面发送请求。我不需要脚本其余部分的curl\u exec结果,我也不希望在curl\u exec请求完成并收到响应之前阻止它 如果我能分出剧本的某个特定部分,有什么想法吗 或者任何其他设计想法…?以下是一些想法: 使用curl_multi,并在请求的最后关闭curl。你甚至可以在“关机后”这样做 使用辅助脚本,例如“gearman” 或: 您可以手动打开套接字,并使用libevent扩展异步处理内容 看看,这可能是您需要的:PHP不支持f
curl\u exec
向另一个页面发送请求。我不需要脚本其余部分的curl\u exec
结果,我也不希望在curl\u exec
请求完成并收到响应之前阻止它
如果我能分出剧本的某个特定部分,有什么想法吗
或者任何其他设计想法…?以下是一些想法:
- 使用curl_multi,并在请求的最后关闭curl。你甚至可以在“关机后”这样做
- 使用辅助脚本,例如“gearman”
- 您可以手动打开套接字,并使用libevent扩展异步处理内容
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);
}
摘自:
作为,您可以使用
CURLOPT\u TIMEOUT\u MS
,因为PHP5.2.3和CURL 7.16.2。您需要CURL请求的响应吗
首先,您需要fork的pcntl函数通常不是一个好主意
一种方法是将cURL代码放在一个单独的脚本中,并执行该脚本,使其在后台运行
$command = "php ..../wherever/your/kohana/cli/controller/is.php";
exec('php /path/to/curlscript.php > /dev/null &');
输出到/dev/null&允许脚本在后台继续运行。
或者,可能更好的解决方案是实现一个队列系统,如Gearman或RabbitMQ。这仍然会阻塞至少一秒钟听起来是个好主意。我的问题是,当我在不使用&的情况下从命令行执行时,脚本工作正常。但是当添加时&它失败了。有什么想法吗?
&
告诉终端不要等待响应。至于为什么它不起作用。。。好问题。您是否有权访问终端,以便在PHP之外进行尝试?另外,如果这是经常要执行的操作,例如,因为有一个面向公众的页面,在这种情况下,你最好实现一个队列系统。是的,我是从控制台执行的,我也遇到了同样的问题。我用“php test.php>log.txt”实现了一个简单的脚本,效果很好。剧本只回了一声“你好”;。当我添加&时,我没有得到任何log.txt。奇怪的是,我实际上想做的是推送谷歌安卓C2DM服务器,这需要几秒钟的时间。是的,我可以做一个队列脚本,但首先我会选择快速选项……如果您无法找到&symbol(后台运行进程)不起作用的原因,在谷歌搜索之后,可能值得就此提出一个问题。我不知道为什么它不起作用。对不起,我帮不了你。