PHP exec в другом файле PHP - как заставить мой скрипт ждать?

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

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

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

Спасибо


person Hubro    schedule 22.03.2011    source источник


Ответы (2)


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

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

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

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

person evan    schedule 22.03.2011
comment
Это очень интересная и правдоподобная теория. Я проверю это позже - person Hubro; 23.03.2011

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

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

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

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

Loop(); 
person frostymarvelous    schedule 22.03.2011