В настоящее время я создаю класс на 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 на производстве. Следовательно, решения только для окон - это не то, что я ищу, если только эта проблема не превратится чтобы быть связанными с окнами)
Вы пытались «вручную» писать на 'c:/temp /', чтобы убедиться, что владелец процесса php имеет право писать там? –
@Dennis Haarbrink: Просто протестировал это, и он отлично работает. Но даже если бы этого не случилось, я бы ожидал увидеть это в строке результата, возвращаемой 'shell_exec()', так как WKHTMLTOPDF предупреждает меня, если файлы не читаются/записываются. – Duroth