Вызовите другой скрипт PHP и верните управление пользователю до завершения работы другого скрипта. - PullRequest
3 голосов
/ 24 февраля 2011

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

Опции, которые я рассмотрел:
Cron Job: Для этого мне нужно, чтобы Cron Job запускался примерно каждые 2 минуты. Не осуществимо!
PHP-скрипт, активирующий работу cron, который деактивируется, когда закончил. : Хорошо, но как мне это сделать? Может ли PHP сделать это?

Ответы [ 4 ]

4 голосов
/ 24 февраля 2011

Вы также можете вызвать оболочку и вручную вызвать файл PHP. Не требуется cron и не нужно ждать.

http://www.php.net/manual/en/function.exec.php

Из Notes секции

"Если программа запускается с этим функция для того, чтобы продолжить работает в фоновом режиме, вывод программы должны быть перенаправлены на файл или другой выходной поток. провал это приведет к зависанию PHP до выполнение программы заканчивается. "

1 голос
/ 24 февраля 2011

Я использую jQuery и AJAX, чтобы делать подобные вещи для сценариев PHP, которые занимают много времени.

1 голос
/ 24 февраля 2011

Другое решение:

  • Ваш скрипт помещает токен куда-то (БД / файловая система), когда необходимо отправить письмо (токен может содержать данные для генерации почты)
  • Демон (может быть написан на php) запускается в фоновом режиме в поисках токенов и «ест» их для отправки почты

Я довольно часто использую подобные решения ...

0 голосов
/ 02 мая 2011

То, что вы хотите использовать, называется beanstalkd

Подробности: Как получить список всех заданий в трубочном бобе?

Это позволит вам поставить в очередь задания (выполнить 1, затем 2, затем 3., затем 4), вы даже можете распределить эти задания по серверам (да, для заданий php!).

...