在后台运行PHP脚本(不中断用户)?

时间:2012-01-21 22:37:29

标签: php

我想在后台运行一个PHP脚本来记录访问者信息(在用户页面加载之后),这样就不会让用户慢下来。

根据我的发现,有几种方法可以实现这一目标,一种是启动popen命令,另一种是使用exec,最后一次我知道< / em>正在使用fsockopensource):

$socket = fsockopen($_SERVER['HTTP_HOST'],80,$errorno,$errorstr,10); 
if($socket) { 
   $socketdata = “GET /background_script.php HTTP 1.1\r\nHost: “.$_SERVER['HTTP_HOST'].”\r\nConnection: Close\r\n\r\n”; 
   fwrite($socket,$socketdata); 
   fclose($socket); 
}

我的服务器不允许使用popenexec,因此只留下fsockopen

这是我可以使用的最佳方法吗?

感谢您的支持(:

修改

我找到的另一个可能的解决方案是将Connection: close发送到浏览器以停止在客户端加载,然后include background_script

建议使用此解决方案吗?

E.G:

ob_start();
echo $OUTPUT_DATA;
header("Content-Length: ".ob_get_length());
header('Connection: close');

ob_end_flush();
ob_flush();
flush();

//Do background visitor logging stuff here..

1 个答案:

答案 0 :(得分:1)

您可以实施排队解决方案,以满足您的要求,如下所示:

  1. 用户登录
  2. PHP用户功能将工作添加到“登录”队列
  3. 从队列中分配“永远在线”的PHP脚本(工作人员)
  4. 工作在后台完成
  5. 这种方法稍微先进一点,因为你必须引入一个队列管理器和php守护进程来处理工作,但是在完成后它会很有用。

    我建议在'Gearman'上阅读some docs,它有built-in个php用户函数。