PHP Показывает окно командной строки CMD (Windows)
Обычно вы хотели бы скрыть окно CMD. В моем случае я буду проводить некоторые тесты с PHP+CLI. Было бы очень полезно, если бы PHP можно было заставить запускать всплывающее окно командной строки. Но, увы, я не могу найти способ сделать это.
Следующая команда должна была заставить его работать, но это не так:
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 answers
Я немного опоздал с ответом на этот вопрос, но чтобы помочь закрыть этот вопрос, вот мой ответ.
Команда верна, но вам нужно заставить Apache взаимодействовать с рабочим столом. Если вы находитесь на компьютере с Windows, просто перейдите в раздел службы, найдите Apache и убедитесь, что вы установили флажок "Разрешить службе взаимодействовать с рабочим столом".
Вот проект, который позволяет 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(), таким образом вы также можете обрабатывать возврат и любые исключения.