У меня есть программа на моем Linux-сервере, которая задает одну и ту же серию вопросов каждый раз, когда она выполняется, а затем предоставляет несколько строк вывода. Моя цель – автоматизировать ввод и вывод с помощью php-скрипта.
Программа не предназначена для ввода ввода в командной строке. Вместо этого программа задает вопрос 1 и ждет ответа с клавиатуры, тогда программа задает вопрос 2 и ждет ответа с клавиатуры и т. Д.
Я знаю, как захватить вывод в массиве, написав: $ out = array (); Exec ( "мой / путь / программа", $ из);
Но как мне обрабатывать вход ? Предположим, что программа задает 3 вопроса и действительные ответы: left 120 n. Каков самый простой способ использования php для передачи этого ввода в программу? Могу ли я сделать это как-то на линии exec?
Я не php noob, а просто никогда не делал этого раньше. Увы, мой гуглинг идет по кругу.
Прежде всего, чтобы вы знали, что пытаетесь изобрести колесо. То, что вы действительно ищете, – это ожидание (1) , которое представляет собой утилиту командной строки, предназначенную для того, чтобы делать именно то, что вы хотите, без привлечения PHP.
Однако, если вы действительно хотите написать свой собственный PHP-код, вам нужно использовать proc_open
. Вот несколько примеров хорошего кода при чтении из STDOUT и записи в STDIN дочернего процесса с использованием proc_open
:
Наконец, есть модуль Expect PECL для PHP.
Надеюсь это поможет.
Просто добавьте аргументы в строку exec.
exec("/path/to/programname $arg1 $arg2 $arg3");
… но не забудьте применить escapeshellarg()
для каждого аргумента! В противном случае вы уязвимы для инъекционного вредоносного кода.
$out = array(); //add elements/parameters/input to array string $execpath = "my/path/program "; foreach($out as $parameter) { $execpath += $parameter; //$execpath += "-"+$execpath; use this if you need to add a '-' in front of your parameters. } exec($execpath);