2008-11-25 3 views
7

Я пишу простое приложение на PHP, которое должно иногда выполнять довольно интенсивный набор обновлений MySQL. Я не особо хочу, чтобы это вызывало задержку для пользователя, поэтому мне интересно об использовании pcntl_fork().Является ли процесс forking в PHP/Apache хорошей идеей?

Я не уверен, как это действительно работает: продолжит ли процесс дочернего процесса после завершения родительского процесса? Закончится ли родительский процесс, и загрузка страницы пользователя полностью завершится до завершения дочернего процесса?

Другими словами, это безопасный способ заставить PHP-скрипт (работающий под Apache) выполнять некоторые трудоемкие обновления без задержки пользователя, или я должен просто попросить моих пользователей смириться с некоторой задержкой?

+0

Просьба указать в заголовке вопроса, что вы хотите развернуть процесс. Сначала я думал, что вы хотите разветвить проект. – 2008-11-25 15:36:35

ответ

3

Родительский процесс завершится, страница пользователя будет загружаться полностью, дочерний процесс будет продолжен, и использование не будет иметь обратной связи относительно того, завершился ли дочерний процесс успешно.

1

Возможно, кто-то может рассказать вам подробно, что происходит, когда вы вызываете это под apache, но, скорее всего, вы получите ответы, которые не всегда верны в зависимости от того, какие версии и комбинации apache и php вы используете. Вы должны использовать ajax и иметь два запроса. Повторите один раз со страницей, в которой говорится, что вы делаете, а затем с опросом ajax-звонков - второй запрос статуса и где вы на самом деле выполняете работу.

0

Если PHP работает под Apache, поскольку форматирование модуля mod_php не будет работать вообще, вы получите предупреждение о том, что функция * pcntl_fork() * не определена. В этом случае хорошим решением является использование exec() вместо этого для запуска отдельного задания php с использованием командной строки.

0

Я думаю, что это плохая идея. Я сделал подобный материал, и apache перенаправляет вывод родителя на его дочерний элемент. Это ваш браузер показывает информацию из одного из дочерних процессов.
Нажмите this для получения дополнительной информации
Надеюсь, вам это поможет.

Смежные вопросы