用户事件后运行脚本,但不影响页面加载?

时间:2010-09-14 06:48:49

标签: php scripting

我想在用户提交新记录时触发脚本更新某些统计信息,但我不希望用户在重定向之前必须等待脚本完成。

>-- Time -->
                        > redirect User -> User Does Stuff -> more stuff -> etc
                       /                   
User Input -> Submit ->
                       \
                        > updating stats in background -> Possibly still running

在PHP中执行此操作的最佳方法是什么?

为Fabrik编辑

用户希望看到反映新数据添加的即时反馈,但这些新数据每天只有2到3次,所以我认为基于时间间隔的CRON作业可能是不必要的服务器资源使用和也不能满足他们的紧迫性需求。希望这有帮助!

3 个答案:

答案 0 :(得分:1)

我对php background process进行了快速谷歌搜索,大多数点击建议使用execshell_exec来调用您想要在后台运行的脚本。

编辑: This article似乎与您的问题最相关。

答案 1 :(得分:1)

如果您只需要一个小代码片段,我会选择以下内容:

<?php
if($new_record) {
  exec("php /path/updateStats.php ".escapeshellarg($userid)." >/dev/null &");
  your_redirect_call_etc();
}

重定向输出流和'&amp;'将导致exec调用独立于脚本运行。

如果您需要更大/可扩展的解决方案,您可以查看类似Gearman的内容,这样您就可以轻松地在另一台服务器上运行这些后台作业。

答案 2 :(得分:0)

不错的图表,但是:

  • 我们需要了解您的需求(例如,是否可以使用cron或我们需要尽快显示统计信息?)
  • 如果您可以使用cron设置一个小间隔(5分钟),那么轮询您的数据库以进行更改
  • 如果您无法使用cron尝试使用AJAX完全构建您的网站,那么您可以安全地运行后台进程