2010-05-18 1 views

ответ

3

Использование popen():

$command = 'php somefile.php'; 
pclose(popen($command,'r')); 

Это запускает somefile.php как фоновый процесс.

0

Вы должны убедиться, что фоновый процесс не завершен, когда обработка страницы завершена. Если вы на системе Linux, вы можете попробовать использовать команду поЬир:

$command = 'nohup php somefile.php'; 
pclose(popen($command,'r')); 

Если он все еще получает прекращено, вы можете попробовать команду «демон».

2

Это метод, который я использовал, чтобы обойти ограничения, применяемые моим веб-хостом (кто ограничил cronjobs до 15 минут выполнения, поэтому мои резервные скрипты всегда будут таймаутом).

exec('php somefile.php | /dev/null &'); 

Пробой этой линии:

  • exec() - PHP reference Выполняет указанную команду, как из командной строки Linux.
  • php somefile.php: вызывает PHP для открытия и запуска, somefile.php. Это то же поведение, что и при доступе к этому файлу через веб-браузер.
  • | ("pipe") - отправляет выходные данные текущей команды на указанную цель. В этом случае он «протрубит» содержимое, которое обычно читается веб-браузером, обращаясь к файлу.
  • /dev/null - Черная дыра. Нет, не шучу. Это место, где вы отправляете выходные данные, если хотите просто исчезнуть.
  • & - Добавление этого символа в конец команды Linux означает «Не ждать - отправьте это на задний план и продолжайте».

Таким образом, предоставленный код будет выполнять PHP-скрипт, не возвращать выходные данные и не дожидаться его завершения, прежде чем перейти к следующей строке.

(И, как всегда, если какие-либо из этих предположений с моей стороны в заблуждении, я хотел бы быть скорректирован более осведомленными членами сообщества.)