HHVM下创建后台进程

Creating a background process under HHVM

我有一个 php 脚本,我想在用户提交表单后在后台 运行。 最简单的解决方案似乎是使用如下的叉子:

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

这在命令行中运行良好,但已 "disallowed" 用于浏览器 (HHVM can't use pcntl_fork)。


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

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

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

"Failed to initialize central HHBC repository: Failed to open file /var/www/.hhvm.hhbc"

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

击中了

"Failed to initialize central HHBC repository: Failed to initialize schema in /var/www/.hhvm.hhbc:"

我对整个 html 文件夹和原始 .hhvm.hhbc 中的 chmod 777 有点着迷,但这对我没有好处。


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

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