PHP exec для другого файла PHP - Как заставить мой скрипт ждать? - PullRequest
2 голосов
/ 22 марта 2011

Я выполняю непрерывный цикл PHP, который выполняет другой файл PHP с помощью exec("php ...");. План для запуска выполненного сценария, затем спать в течение 2 секунд, а затем запустить снова. Однако, похоже, что мой цикл запускает новый экземпляр каждые 2 секунды. Короткий вопрос, как мне заставить мой первый php-скрипт ждать завершения сценария № 2?

Все это выполняется с помощью командной строки. Я также хотел бы, чтобы функции echo в сценарии № 2 отображались в командной строке.

Любые мысли помогут.

Спасибо

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Exec не поддерживает информацию о состоянии между экземплярами.Вы можете:
Цикл в вашем индексе
ИЛИ
Вы можете установить какие-либо переменные окружения или которые будут прочитаны в начале индекса и записаны в конце.
ИЛИ
Вы можетеиметь подстрочный индекс для чтения / записи в файл аналогичным образом
ИЛИ
Вы можете передать параметры в индекс, который выводит данные

Для вывода на экран вы можете поиграть сдругие вызовы exec / system:
exec
shell_exec
passthru
system

Я полагаю, что passthru () будет работать.Другой возможностью, если это не так, является вызов exec () с использованием выходных параметров для захвата выходных строк из нижнего индекса.Затем просто повторить этот вывод по возвращении индекса.

Я также считаю, что использование выходных параметров (или захват результата функции в переменной) приведет к тому, что exec будет ждать завершения команды, прежде чем продолжить.

0 голосов
/ 22 марта 2011

Проблема в том, что когда вы выполните сценарий, он запустится.Другой exec запустит другой экземпляр, как вы выяснили.

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

// maybe set time limit here
Function loop ()
{

Sleep(120); 
//you can make a check whether to loop or not.
Loop(); 
}

Loop(); 
...