PHP Показать окно командной строки CMD (Windows) - PullRequest
2 голосов
/ 30 мая 2011

Обычно вы хотите скрыть окно CMD.В моем случае я буду делать некоторые тесты с PHP + CLI.Было бы очень полезно, если бы PHP можно было запустить для запуска всплывающего окна CLI.Но, увы, я не могу найти способ сделать это.

Следующая команда должна была заставить его работать, но это не так:

START "PHP AE2" CMD /K DIR

PHP-код, о котором идет речьоснован на proc_open():

$proc=proc_open($cmd,array(
    0=>array('pipe','r'), // STDIN
    1=>array('pipe','w'), // STDOUT
    2=>array('pipe','w')  // STDERR
),$pipes);
// ....some stream stuff....
$return=proc_close($proc);

Хотя команда работает нормально, всплывающее окно не отображается.Я подозреваю, что это особенность Apache.Есть ли способ полностью отсоединить CMD от его родителя?

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

(Это в основном для образовательных целей и не пойдет в производство.)

Ответы [ 2 ]

2 голосов
/ 24 июля 2011

Я немного опаздываю с ответом на этот вопрос, но чтобы помочь закрыть этот вопрос, вот мой ответ.

Команда верна, но вам нужно настроить Apache для взаимодействия с рабочим столом. Если вы работаете на компьютере с Windows, просто зайдите в службы, найдите Apache и убедитесь, что вы отметили флажок «Разрешить взаимодействию службы с рабочим столом».

0 голосов
/ 01 ноября 2016

Вот проект, который позволяет PHP динамически получать и взаимодействовать с реальным терминалом cmd.Получите это здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

//if you prefer Powershell, replace 'cmd' with 'powershell'
$shellObj    = \MTS\Factories::getDevices()->getLocalHost()->getShell('cmd');

//you might need to ad php to the system environment variable
$strCmd1   = 'START "seq" cmd /c "PHP AE2"';
$return1   = $shellObj->exeCmd($strCmd1);

Вы можете выполнить любую команду, которая вам нравится, в отношении $ shellObj, среда поддерживается на протяжении всегожизнь сценария PHP.Поэтому вместо объединения команд в файле сценария просто выполните их одну за другой, используя метод exeCmd (), чтобы вы также могли обрабатывать возврат и любые исключения.

...