Есть ли способ запустить скрипт php и получить статус? - PullRequest
3 голосов
/ 03 сентября 2011

возможно ли запускать php-скрипт в фоновом режиме на веб-сервере с помощью js и запускать его, даже если вы изменили страницу или вообще не заходите на сайт, а затем получите текущий статус, если вы вызовете php-скрипт во второй момент?

Этот php-скрипт будет обрабатывать данные часами и спать по X секунд / минут для каждого цикла.Если то, что я спрашивал ранее, возможно, как я могу получить от него «эхо», если php будет генерировать вывод только после завершения скрипта?

Может быть, это не работа для PHP?

спасибо

РЕДАКТИРОВАТЬ: на машине Windows с Apache

Ответы [ 2 ]

3 голосов
/ 03 сентября 2011

Это, конечно, возможно - у меня есть несколько скриптов, которые работают 24/7, написанные на PHP. Проверьте Создание демонов в PHP . В нем содержится хорошая информация о том, как «демонизировать» php-скрипт, чтобы он работал как служба, и он также охватывает обработку сигналов.

Чтобы получить отладочную информацию, вы должны перенаправить в файл журнала. Выполните поиск по «выводу перенаправления Unix», так как доступно много информации.

1 голос
/ 03 сентября 2011

В Windows он не сильно отличается от UNIX.

Прежде всего, вам нужно создать скрипт PHP с циклом выполнения.Например, взгляните на это: http://code.google.com/p/php-apns/.Это PHP-демон: основной скрипт, PushMonitor.php, выполняется вечно, потому что он имеет бесконечный цикл.Он опрашивает очередь через равные промежутки времени, затем выполняет действия и затем ждет.Действительно просто, на самом деле!

Проблема, в вашем случае, заключается в том, что вы хотите запустить «демон» из сценария PHP.Вы можете посмотреть на это: http://robert.accettura.com/blog/2006/09/14/asynchronous-processing-with-php/ (код первого примера).Вы выполните что-то вроде launchBackgroundProcess('php myscript.php').

Обратите внимание, что в коде есть команда «start / b» (и «&» в конце команды для UNIX).Это важно, потому что в противном случае ваш процесс будет прерван, когда PHP-скрипт веб-страницы завершится (дочерний процесс умирает после того, как родительский умирает!).Также помните, что исполняемый файл «php» (cli) должен находиться в вашем пути (чтобы вы могли выполнить «php» из командной строки).

Поскольку PHP-скрипт страницы, запускающей фоновый процесс, работаетчтобы прекратить, вы не можете напрямую поймать «эхо» простым способом.Я предлагаю записать весь вывод в файл (или базу данных и т. Д.), А затем при необходимости прочитать содержимое из этого источника.Таким образом, вместо «echo» вы будете использовать file_put_contents () и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...