Запустите второй файл php с 20-секундной задержкой - PullRequest
3 голосов
/ 14 декабря 2011

Мне нужно запустить второй файл php в фоновом режиме. Проблема в том, что этот файл должен запускаться только через 20 секунд после завершения текущего файла. Я использовал exec ("php test_script.php") для запуска файла, но я не могу заставить его ждать. Если я использую sleep (), если останавливает мой текущий скрипт.

Чтобы быть более конкретным. Я загружаю файл на удаленный сервер. Затем мне нужно подождать примерно 20 секунд после завершения загрузки, чтобы проверить ответ сервера. Тем временем я хотел бы продолжить текущий файл. Второй файл будет делать то, что нужно в фоновом режиме. На данный момент я должен ждать, а затем запустить второй файл.

Ответы [ 2 ]

4 голосов
/ 14 декабря 2011

Самое простое решение для этого можно найти здесь . В основном, выполните ваш скрипт так:

exec('test_script.php >/tmp/output.txt &');

Обратите внимание на амперсанд ('&') в конце, это заставит команду работать в фоновом режиме! Вы можете отложить сценарий на 20 секунд, добавив режим сна в test_script.php.

Другие ваши варианты - запускать второй скрипт либо через Javascript (AJAX) со стороны клиента; или иметь процесс, работающий в фоновом режиме (или регулярно через задание cron), который проверяет какие-то общие данные (например, базу данных) на предмет запросов и активируется, если такой запрос необходимо обработать.

JavaScript не подходит, если сценарий должен запускать , поскольку пользователь может решить отказаться от вашей страницы или не выполнять JavaScript, либо быть злонамеренным и принять решение не выполнять этот конкретный JavaScript.

2 голосов
/ 14 декабря 2011

Поместите вызов sleep() в ваш файл test_script.php (перед фактическим кодом), а затем при вызове exec обязательно перенаправьте вывод команды в файл. Что-то вроде:

exec("php test_script.php > /tmp/output.txt");

Это гарантирует, что оно не прервет загрузку первого (вызывающего) скрипта и будет асинхронным.

...