2009-06-02 5 views
0

Я пытаюсь заставить PHP вызывать пакетный файл, который будет принимать RTF-файл и преобразовать его в PDF с использованием макроса OpenOffice. Я тестировал командный файл в командной строке, и он отлично работает, но мне не удастся позвонить и использовать тот же пакетный файл с PHP.Проблема с использованием команды PHP exec для выполнения командного файла

Моя машина OS XP Professional SP 3. Я запускаю IIS 6 и версию PHP 5.2.9. Я предоставил разрешения на выполнение для пользователя Интернета в каталоге c: \ windows \ system32 \ cmd.exe. Я указал полный путь к исполняемому пакетному файлу и полный путь к RTF-файлу, который нужно преобразовать.

РНР выглядит следующим образом, где $ Arg является РТФ быть преобразован:

$arg = "C:\\web_root\\whatever\\tempOutput.rtf"; 
$command = "c:\\windows\\system32\\cmd.exe /c c:\\web_root\\whatever\\convert.bat $arg"; 

Тогда внутри примерки улова я называю EXEC команды:

exec("$command 2>&1 && exit", $ret, $err); 

I эхом результаты после того, как улов:

echo "ret: "; 
print_r ($ret); 
print "<br>"; 
echo "err is "; 
echo $err; 
print "<br>"; 
echo "DONE!"; 

И это то, что я вижу:

ret: Array () 
err is 0 
DONE! 

Файл RTF не преобразуется, и я не вижу ошибок. Любые идеи о том, что я могу попробовать дальше? Благодаря!!!

+0

Можете ли вы указать свой командный файл? – cdonner

+0

Связанный, [Как вы запускаете .bat-файл с PHP?] (Http://stackoverflow.com/q/835941) – jww

ответ

0

Работает ли PHP в безопасном режиме? Если это так, команды оболочки экранируются с помощью escapeshellcmd. Возможно, это проблема?

У вас есть контроль над сервером, на котором запущен скрипт PHP?

1

Я готов поспорить, что речь идет о разрешениях.

В типичной настройке PHP работает как apache - поэтому вы должны убедиться, что у apache есть права на выполнение командного файла.

также, проверка this relevant SO question, и this google search.

1

Похоже, что выходной массив пуст. Предполагается, что ваш пакетный сценарий имеет выход?

Кроме того, escapeshellcmd и escapeshellarg следует использовать

1

Вы используете IIS как веб-сервер? Если это так, функция exec PHP не будет работать по умолчанию, и вы НЕ должны обойти меры безопасности, которые мешают ей работать.

Проверьте, есть ли у вас какие-либо ошибки, связанные с вашей проблемой. Запустите запрос через google для: IIS PHP exec. Это должно дать вам большой выбор информации о проблеме.

В принципе, функция exec PHP пытается развернуть новый экземпляр cmd.exe. IIS запрещает это, потому что он может открыть дыру в системе.

Лучшее решение, с которым я столкнулся, заключается в том, чтобы ваш скрипт PHP написал команду, которую вы хотите выполнить, в плоский файл или сделать запись в базе данных. Затем вам нужно будет написать отдельный сценарий, запускаемый планировщиком окон, для запуска каждые 10 минут или так, чтобы проверить ваш плоский файл или базу данных для запуска команд.Затем новый скрипт запустит команды, а затем разместит либо результаты, либо подтверждение выполнения, которое ваше веб-приложение сможет получить позднее.

Это точно.