У меня есть скрипт php, который я хотел бы запустить в фоновом режиме после того, как пользователь отправит форму.
Казалось бы, самое простое решение — использовать вилку, подобную следующей:
$pid = pcntl_fork();
if ($pid) {
// Parent process. Do nothing.
} else {
// Child process. Put background script in this block.
}
Это хорошо работает из командной строки, но было «запрещено» для браузеров (HHVM не может использовать 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: «
Я немного сходил с ума по chmod 777 по всей папке html и по оригинальному .hhvm.hhbc, но это не помогло мне.
Запустить мой фоновый скрипт на переднем плане очень неудобно для пользователя, потому что после нажатия кнопки «Отправить» перед нажатием кнопки «Отправить» появляется 15-секундная пауза. У кого-нибудь есть идеи как это сделать?
Попробуйте использовать «Pagelets». Это позволяет вам раскрутить новый фоновый PHP-запрос.
Документы здесь: https://github.com/facebook/hhvm/blob/master/hphp/doc/threading
Других решений пока нет …