在HHVM下创建后台进程

时间:2015-04-17 02:50:47

标签: php vagrant daemon background-process hhvm

我有一个PHP脚本,我想在用户提交表单后在后台运行。 最简单的解决方案似乎是使用类似以下的分支:

$pid = pcntl_fork();
if ($pid) {
    // Parent process. Do nothing.
} else {
    // Child process. Put background script in this block.
}

这在命令行中运行良好,但已被“禁止”浏览器(HHVM can't use pcntl_fork)。


下一个最简单的解决方案是使用

exec( 'php ' . $path . ' > /dev/null &' );

其中$ path指向我的后台脚本。同样,这在命令行上完美运行,但是当从浏览器运行时会产生错误

  

“无法初始化中央HHBC存储库:无法打开文件   /var/www/.hhvm.hhbc“

我甚至没有/ var / www /文件夹,所以出于绝望,我创建了一个并将.hhvm.hhbc从/home/vagrant/.hhvm.hhbc符号链接到新目录中。然后我被打了

  

“无法初始化中央HHBC存储库:无法初始化   /var/www/.hhvm.hhbc中的模式:“

我在整个html文件夹和原版.hhvm.hhbc中使用chmod 777有点疯狂,但它对我没有好处。


在前台运行我的后台脚本是一个非常糟糕的用户体验,因为在用户再次看到页面之前单击提交按钮后会有~15秒的暂停。有没有人知道如何做到这一点?

1 个答案:

答案 0 :(得分:1)

尝试使用“pagelets”。这使您可以启动新的后台PHP请求。 文档:https://github.com/facebook/hhvm/blob/master/hphp/doc/threading