shell_exec () в PHP не выполняет мою конкретную команду - PullRequest
1 голос
/ 28 июля 2010

В настоящее время я создаю класс в PHP, который генерирует документы PDF с помощью приложения WKHTMLTOPDF для командной строки.

Для этого я использую вызов shell_exec для вызоваИсполняемый файл WKHTMLTOPDF.Однако этот конкретный вызов не выполняется;он возвращает NULL почти мгновенно.

Небольшой тест, который я сделал, дал мне следующие результаты:

var_dump(shell_exec('ping nu.nl'));
// This prints a string, containting the expected output of the ping command
var_dump(shell_exec('"c:/wkhtmltopdf/wkhtmltopdf.exe" --orientation "Landscape" --page-size "A2" --margin-top "25mm" --margin-left "20mm" --margin-bottom "20mm" --margin-right "20mm" "http://www.nu.nl/" "C:/Temp/1280310218.pdf"'));
// This prints NULL

Итак, shell_exec(), кажется, работает, также safe_mode выключен, ивставка полной команды в cmd.exe выполняет для правильного выполнения команды.

Если проблема не связана ни с одним из перечисленных действий (безопасный режим, неисправная команда или shell_exec())) что еще это может быть?Все, о чем я могу думать, - это проблема прав пользователя, но и исполняемый файл, и каталог, в котором он находится, имеют параметры полного доступа для каждой группы пользователей в моей системе.

(Примечание. Хотя я занимаюсь разработкой на компьютере под управлением Windowsэтот код будет работать на сервере Linux в производственной среде. Следовательно, решения только для окон - это не то, что я ищу, если, конечно, сама эта проблема не связана с окнами)

Ответы [ 3 ]

0 голосов
/ 28 июля 2010

Проверьте разрешения, создав файл, используя fopen () в temp dir.Это создает PDF?Может быть, эта программа не выводит в stdout, но stderr такой же, как ffmpeg, например.Попробуйте добавить «2> & 1» после вашей команды.

Или, это программное обеспечение использует некоторые файлы в каталоге, где установлен.Попробуйте сначала изменить каталог, добавив что-то вроде "cd c: \ wkhtmltopdf; YOUR_COMMAND"

0 голосов
/ 11 сентября 2012

удалить эти настройки переменных среды >>

"DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"

#export DYLD_LIBRARY_PATH

и должно работать.

0 голосов
/ 28 июля 2010

Для этого вы можете использовать библиотеку php, которая будет более эффективной и интегрированной.Например, html2pdf .

...