2011-12-14 2 views
3

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

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

+1

так почему бы вам не использовать свое текущее решение и не добавить свой сон (20) в начале второго файла вместо того, чтобы использовать его в конце первого? – mishu

+1

как насчет функции setTimeout() javascript с вызовом ajax? –

ответ

4

Проще всего это может сделать be found here. В основном, выполнить сценарий, как это:

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

Примечание амперсанд («&») в конце концов, это заставит команду работать в фоновом режиме! Вы можете задержать скрипт на 20 секунд, добавив sleep в test_script.php.

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

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

+0

Большое спасибо Работает с амперсандом в конце. – user1097983

2

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

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

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

+0

Как просто перенаправить вывод, чтобы процесс выполнялся асинхронно/в фоновом режиме? – codeling

+0

@nyarlathotep - согласно руководству PHP: «Если программа запускается с этой функцией, чтобы она продолжала работать в фоновом режиме, выход программы должен быть перенаправлен в файл или другой выходной поток. поэтому PHP зависнет до тех пор, пока выполнение программы не закончится ». – jason

+0

Интересно, немецкая версия PHP-версии (которая для меня появляется сначала на google) не имеет этого дополнительного примечания ... – codeling

Смежные вопросы