Intereting Posts
почему PEAR не использует абсолютные пути? PHP и пути – относительно файла и не включая код Проблема с catch (FacebookApiException $ e) при входе в facebook с использованием php sdk Как я могу вернуть представление из вызова ajax в Laravel 5 Как заставить браузер показывать последние изменения в файле CSS? Проверьте, существует ли значение в result_array () Могу ли я переписать мои URL-адреса, как это, и это хорошая идея? Использовать PHP для создания, редактирования и удаления заданий crontab? Есть ли способ установить Composer глобально в Windows? Запуск сценария Python на сервере PHP Как сжать / распаковать длинную строку запроса в PHP? Защита паролем веб-каталогов и файлов Соединение между phpstorm и xdebug Предотвращение обхода каталога в PHP, но допускающие пути PHP Script для вычисления значений форм со значениями по умолчанию, возможно, с использованием операторов if и else для submit. to page2.php

php Как запустить внешнюю программу – возникли проблемы с системой и exec

Я работаю в контролируемой среде xp, intranet, и мне нужно запустить внешние процессы из приложений PHP. (Резервные копии, отчеты и т. Д.)

Я могу заставить систему или exec запустить процессы, которые работают молча. Вот простой пример

<?php exec ("echo hello > hello.txt");?> 

Я могу заставить его выполнить файл bat, который не имеет видимого выхода.

Я не могу получить любую программу, которая имеет экран для запуска, например, генератор отчетов или блокнот …

 <?php exec ("explorer");?> 

ничего не делает. или же для системы

Какое поведение вы ожидаете? system('notepad') звонков system('notepad') отлично работает – она ​​просто не отображает графический интерфейс. Он работает в фоновом режиме, и PHP сидит там терпеливо, ожидая, когда блокнот закроется (и только продолжит, если вы убьете блокнот из списка процессов).

Если вы ожидаете, что он появится в графическом интерфейсе, я уверен, что вы не сможете этого сделать. 😉 Опция может состоять в том, чтобы выписать пакетный скрипт ( file_put_contents('runme.bat', 'notepad hello.txt') ) и file_put_contents('runme.bat', 'notepad hello.txt') этот пакетный скрипт в очередь (с планировщиком Windows или любым другим, что эквивалентен cron-эквиваленту в Windows), чтобы запускаться в асинхронном режиме (и в конце концов проясняться).

Очень поздний ответ, но я сам работал над этим и обнаружил, что действительно можно запустить программу GUI с PHP с сервером Apache в Windows XP.

  • Start-> Run, введите «services.msc», чтобы открыть диспетчер служб (другие способы добраться туда, это самый простой ИМО)
  • Найдите свой сервис Apache (мой был назван «wampapache» с использованием WampServer 2.0)
  • Откройте свойства сервиса (дважды щелкните или щелкните правой кнопкой мыши-> свойства)
  • Перейдите на учетную запись «Вход в систему» ​​и установите флажок «Разрешить службу для взаимодействия с Desktop».
  • Вернитесь на вкладку «Общие», остановите службу, запустите службу

Теперь, используя приведенный ниже код, вы можете создавать процессы пользовательского интерфейса с PHP. В первом фрагменте кода сценарий не будет ждать закрытия приложения; второй фрагмент ждет закрытия программы, прежде чем продолжить (блокирование).

Не ждите приложения:

pclose(popen("start /B notepad.exe", "r"));

Ждите приложения:

system('start notepad.exe');

Это было протестировано в Windows XP. Я не пробовал его ни в каких других версиях Windows, ваш размер может отличаться.

Примечание. В моей конкретной установке я использовал другую опцию на вкладке «Вход» службы – Apache работал как пользователь домена, чтобы иметь доступ к нескольким сетевым ресурсам с разрешениями пользователя домена. Этот флажок недоступен для этого параметра, только если служба работает как локальная система. После обширных исследований я обнаружил, что нет единого способа, чтобы одна служба взаимодействовала с текущим рабочим столом и использовала учетные данные конкретного пользователя. Это одно или другое предложение, предлагаемое средство состоит в том, чтобы разделить вашу службу на два компонента: один, который использует учетные записи пользовательской учетной записи и тот, который взаимодействует с рабочим столом. Не очень практично, когда служба, о которой вы говорите, является веб-сервером. Эта заметка, вероятно, довольно специфична для моего варианта использования, но я хотел поместить ее здесь, если я могу спасти кого-то еще от разочарования в будущем.

Еще один супер поздний ответ, но это появляется в Google при поиске «php run gui program» …

Я смог запустить графическое приложение в Windows 8.1, выполнив, выполнив и удалив запланированную задачу:

 shell_exec('SCHTASKS /F /Create /TN _notepad /TR "notepad.exe" /SC DAILY /RU INTERACTIVE'); shell_exec('SCHTASKS /RUN /TN "_notepad"'); shell_exec('SCHTASKS /DELETE /TN "_notepad" /F');