Я хочу, чтобы одна php-страница начиналась как фоновый процесс с другой php-страницы.Инициирование фонового процесса для запуска php-файла в качестве фона с другой php-страницы
ответ
Использование popen():
$command = 'php somefile.php';
pclose(popen($command,'r'));
Это запускает somefile.php
как фоновый процесс.
Вы должны убедиться, что фоновый процесс не завершен, когда обработка страницы завершена. Если вы на системе Linux, вы можете попробовать использовать команду поЬир:
$command = 'nohup php somefile.php';
pclose(popen($command,'r'));
Если он все еще получает прекращено, вы можете попробовать команду «демон».
Это метод, который я использовал, чтобы обойти ограничения, применяемые моим веб-хостом (кто ограничил cronjobs до 15 минут выполнения, поэтому мои резервные скрипты всегда будут таймаутом).
exec('php somefile.php | /dev/null &');
Пробой этой линии:
exec()
- PHP reference Выполняет указанную команду, как из командной строки Linux.php somefile.php
: вызывает PHP для открытия и запуска, somefile.php. Это то же поведение, что и при доступе к этому файлу через веб-браузер.|
("pipe") - отправляет выходные данные текущей команды на указанную цель. В этом случае он «протрубит» содержимое, которое обычно читается веб-браузером, обращаясь к файлу./dev/null
- Черная дыра. Нет, не шучу. Это место, где вы отправляете выходные данные, если хотите просто исчезнуть.&
- Добавление этого символа в конец команды Linux означает «Не ждать - отправьте это на задний план и продолжайте».
Таким образом, предоставленный код будет выполнять PHP-скрипт, не возвращать выходные данные и не дожидаться его завершения, прежде чем перейти к следующей строке.
(И, как всегда, если какие-либо из этих предположений с моей стороны в заблуждении, я хотел бы быть скорректирован более осведомленными членами сообщества.)