【发布时间】:2010-07-28 10:00:06
【问题描述】:
我目前正在 PHP 中构建一个使用WKHTMLTOPDF 命令行应用程序生成 PDF 文档的类。
为此,我使用了对 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 服务器上运行。因此,仅 Windows 的解决方案不是我要寻找的,除非这个问题本身出现与windows相关)
【问题讨论】:
-
您是否尝试过“手动”写信给
c:/temp/,以确保 php 进程所有者有权在那里写信? -
@Dennis Haarbrink:刚刚测试过,效果很好。但即使我不希望在
shell_exec()返回的结果字符串中看到这一点,因为 WKHTMLTOPDF 会在文件不可读取/不可写入时警告我。
标签: php shell-exec