Как сохранить командную оболочку открытой для выполнения нескольких команд?

Привет, я пытаюсь выполнить несколько команд с помощью PHP на машине Windows. Я попробовал этот код:

<?php
$output= shell_exec("powershell.exe");
$output2= shell_exec("write-host gokul");
shell_exec("exit");
echo( '<pre>' );
echo( $output );
echo( $output2 );
echo( '</pre>' );
?>

PHP выполняет каждую команду с новой оболочкой и закрывает ее по завершении!

Я понимаю, что каждый ‘shell_exec’ создает новую оболочку, и элемент управления ожидает завершения выполнения команды. Как я могу создать оболочку, которая остается открытой в фоновом режиме, пока я не закрою Это ?

Не уверен, что ‘proc_open’ или ‘popen’ могут помочь?

ОБНОВИТЬ
когда я пытаюсь PROC_OPEN ()

$descriptorspec = array(
0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
2 => array("file", "error.txt", "a") // stderr is a file to write to
);
$process = proc_open('cmd.exe', $descriptorspec, $pipes);

if (is_resource($process)) {
fwrite($pipes[0], 'dir');
fwrite($pipes[0], 'powershell.exe');
fwrite($pipes[0], 'write-host gokul');
fclose($pipes[0]);

echo stream_get_contents($pipes[1]);
fclose($pipes[1]);

proc_close($process);
}

Он печатает только подсказку. Могу ли я действительно использовать proc_open для выполнения нескольких команд? Если так, то как?

Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\wamp\bin\apache\Apache2.2.17>More?

2

Решение

С помощью proc_open это правильная попытка, но вам нужно завершить каждую команду символом новой строки. Например, если вы введете команду вручную в сеансе оболочки.

Это должно выглядеть так:

fwrite($pipes[0], 'dir' . PHP_EOL);
fwrite($pipes[0], 'powershell.exe' . PHP_EOL);
fwrite($pipes[0], 'write-host gokul' . PHP_EOL);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]