вызов программы Windows из файла PHP (через командную строку) - PullRequest
1 голос
/ 08 марта 2011

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

Программа открывается на моей машине (без графического интерфейса пользователя), но никогда не закрывает все, что означает, что браузер навсегдапогрузка.

Хотя при выполнении строки запроса вручную из командной строки программа закрывается.Кроме того, программа на самом деле не выполняет

(она просто запущена, т.е. результатов нет).

Я просто хочу знать правильный способ запуска программы с переключателями через PHP.

Вот строка запроса, которая работает (закрывает программу после выполнения):

"C:\Program Files (x86)\Softinterface, Inc\Convert PowerPoint\ConvertPPT.exe" /S 
"C:\Users\Farzad\Desktop\upload\test.ppt" /T "C:\Users\Farzad\Desktop\upload\test.png" /C 18

Ответы [ 4 ]

2 голосов
/ 08 марта 2011

Если программа никогда не закрывается, то PHP не может вернуть значение из exec(). Программа должна закрыться. Скорее всего, существует проблема с доступом к вашим файлам на рабочем столе таким образом. Он будет выполняться с любыми разрешениями, определенными веб-сервером.

http://php.net/manual/en/function.exec.php

Вы можете рассмотреть расширенную функциональность proc_open(). Это даст вам доступ ко всем необходимым каналам, но я не думаю, что это поможет вам в этой ситуации.

1 голос
/ 08 марта 2011

Если целевым каталогом на вашем компьютере Windows является C: \ Program Files (x86) \ Softinterface, Inc \ Convert PowerPoint \ ConvertPPT.exe , вам необходимо заключить в кавычки каталоги, содержащие пробел внутри них.

Чтобы перевести это в термины php, это должно быть так:

$directory = 'C:\"Program Files (x86)"\"Softinterface, Inc"\"Convert PowerPoint"\ConvertPPT.exe';

$command = $directory . ' enter your arguments here';

exec($command, $output, $return_var);

// if $return_var == 0, you hit the jackpot.
0 голосов
/ 08 марта 2011

Возможно, вы столкнулись с этой ошибкой: http://bugs.php.net/bug.php?id=44994

, который беспокоит меня целую вечность, даже сегодня, на PHP 5.3.5.

Кажется, что между выводом ошибок программы и дескриптором файла журнала ошибок apache существует какая-то тупик, в который программа перенаправляется для записи своего вывода stderr, заставляя программу зависать навсегда, пока процессы apache не будут убит.

Кроме того, при использовании passthru, или system, или оператора backtick, существует промежуточный процесс «cmd.exe», который используется для запуска программы в невидимой консоли, и я видел, как этот процесс cmd получал застрял даже без запуска программы.

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

0 голосов
/ 08 марта 2011

Физический каталог, в котором хранится ваш рабочий стол Windows, принадлежит папке вашего профиля пользователя.Это означает, что другие пользователи (в том числе тот, на котором работает Apache, что типично для «локальной системы») не будут иметь соответствующих прав для чтения и записи в него файлов.Хотя вы можете настроить вашу настройку Apache так, чтобы она работала под вашим собственным пользователем, Farzad, чаще размещать веб-приложения в совершенно другом дереве каталогов.Может случиться, что ConvertPPT.exe просто зависнет, потому что он пытается записать файл в месте, где это не разрешено.Я предлагаю вам создать каталог верхней папки и удостовериться, что он доступен для записи во всем мире (когда вы закончите, вы можете усилить эти разрешения, если хотите).

После того, как вы откажетесь (или подтвердите), что проблема вызвана отсутствиемсоответствующие учетные данные, убедитесь, что вы правильно используете команды и аргументы.Смотрите эту ссылку:

http://es2.php.net/manual/en/function.exec.php#101579

Еще одна вещь, которую вы можете попробовать - закрыть сеансы PHP перед выполнением вызова exec ():

http://es2.php.net/manual/en/function.exec.php#99781

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...