2010-07-28 2 views
1

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

Для этого я использую вызов 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 на производстве. Следовательно, решения только для окон - это не то, что я ищу, если только эта проблема не превратится чтобы быть связанными с окнами)

+0

Вы пытались «вручную» писать на 'c:/temp /', чтобы убедиться, что владелец процесса php имеет право писать там? –

+0

@Dennis Haarbrink: Просто протестировал это, и он отлично работает. Но даже если бы этого не случилось, я бы ожидал увидеть это в строке результата, возвращаемой 'shell_exec()', так как WKHTMLTOPDF предупреждает меня, если файлы не читаются/записываются. – Duroth

ответ

0

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

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

+0

Ваше первое предложение сделало трюк; По-видимому, котировки вокруг команды, выполняемой ('' c: /wkhtmltopdf/wkhtmltopdf.exe "), недопустимы, и эта ошибка действительно хранилась в stderr. И подумать, что я добавил только эти цитаты, потому что приложение было установлено в 'Program Files /' в первую очередь! – Duroth

0

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

+0

Причина, по которой я выбрал приложение CLI, а не библиотеку PHP, заключается в том, что ни один из тех, которые я проверил, не предлагает нам всех необходимых нам параметров; FPDF, DOMPDF, TCPDF среди других, все так или иначе отсутствовали. WKHTMLTOPDF - безусловно лучшее и самое полное решение. Если это работает, то есть. – Duroth

-1

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

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

#export DYLD_LIBRARY_PATH 

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

+1

Не могли бы вы рассказать о том, почему вы думаете, что это должно сработать, и как это соответствует ответу, какие проблемы он решает, устраняя эти параметры переменной окружения_? – dbf

+0

он разрабатывает в Win и разворачивает на linux, так что нет Mamp здесь – Paolo

Смежные вопросы