Запуск PHP-скрипта из PHP-скрипта без блокировки

StackOverflow https://stackoverflow.com/questions/2440023

  •  19-09-2019
  •  | 
  •  

Вопрос

Я создаю паука, который будет проходить по различным сайтам и собирать с них данные.

Поскольку мне нужно получить каждую страницу отдельно, это может занять ОЧЕНЬ много времени (возможно, 100 страниц).Я уже установил set_time_limit равным 2 минутам на страницу, но похоже, что Apache уничтожит скрипт через 5 минут, несмотря ни на что.

Обычно это не проблема, поскольку это запускается из cron или чего-то подобного, не имеющего этого ограничения по времени.Однако мне также хотелось бы, чтобы администраторы могли запускать выборку вручную через HTTP-интерфейс.

Не важно, чтобы Apache оставался активным в течение всего времени, я собираюсь использовать AJAX для запуска выборки и время от времени проверять с помощью AJAX.

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

Возможно, я мог бы использовать system('script.php &'), но я не уверен, что это поможет.Есть еще идеи?

Это было полезно?

Решение

    $cmd = "php myscript.php $params > /dev/null 2>/dev/null &";

    # when we call this particular command, the rest of the script 
    # will keep executing, not waiting for a response
    shell_exec($cmd);

При этом все STDOUT и STDERR отправляются в /dev/null, и ваш скрипт продолжает выполняться.Даже если «родительский» сценарий завершится раньше myscript.php, myscript.php завершит выполнение.

Другие советы

если вы не хотите использовать exec, вы можете использовать встроенную функцию PHP!

ignore_user_abort(true);

это заставит сценарий возобновить работу, даже если соединение между браузером и сервером прервано;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top