PHP中的shell_exec()不执行我的特定命令

时间:2010-07-28 10:00:07

标签: php shell-exec

我目前正在使用WKHTMLTOPDF命令行应用程序在PHP中构建一个生成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有关)

3 个答案:

答案 0 :(得分:0)

您可以使用php库来实现这一点,这将更有效和集成。例如html2pdf

答案 1 :(得分:0)

使用temp dir中的fopen()按创建文件检查权限。 它创建pdf吗?也许这个程序不输出到stdout,但stderr与ffmpeg相同,例如。尝试在命令后添加“2>& 1”。

或者,此软件使用安装目录中的某些文件。首先尝试添加类似“cd c:\ wkhtmltopdf; YOUR_COMMAND”的内容来更改目录

答案 2 :(得分:-1)

删除这些环境变量设置>>

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

#export DYLD_LIBRARY_PATH

它应该有用。