今天使用shell_exec()命令执行wkhtmltopdf.exe 生成pdf文件时,老是没法生成PDF文件,使用var_dump()打印返回值,结果是null。但是检查代码并无什么问题啊?执行程序的目录是
D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe
好吧,接下来找找缘由。php
一、经过dos执行wkhtmltopdf程序
首先测试经过dos命令行执行wkhtmltopdf程序:
执行成功,没有问题。css
查看pdf文件是否成功生成:
文件一样成功生成。html
这说明程序执行没有问题。web
二、PHP安全模式
网上说PHP安全模式会影响到shell_php()函数的执行。我查了一下,发现php.ini中安全模式只有sql
[SQL]
; http://php.net/sql.safe-mode
sql.safe_mode=Off
没有其余的安全模式。并且安全模式还会影响exec()函数的使用,我以前曾经使用过exec()函数,因此不是安全模式的问题。shell
三、php.ini中disable_functions参数
百度时,有人说是php.ini配置文件中disable_funcitons=shell_exec()。禁用了shell_exec()函数。好吧,php.ini默认disable_funcitons= (null)。看来不是这里的缘由呢。安全
四、程序执行目录问题
以后,我有检查了一下shell_exec()的执行代码,发现执行目录
D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe有问题。
在第二个目录Program Files中有空格存在,以前考虑到不能含有中文的问题,因此安装wkhtmltopdf时,走的是D盘下的默认目录(原本是C盘,我改成D盘了)。既然不能走中文目录,是否是含有空格的目录也是不行的呢?因而我就把D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe改成D:\wkhtmltopdf\bin\wkhtmltopdf.exe。而后修改了shell_exec()执行代码的执行目录。
最后执行成功,生成了pdf文件。svg
五、环境变量问题
此外把文件添加到环境变量中,能够不用带目录执行wkhtmltopdf程序。只不过,由于是测试wkhtmltopdf是否能执行含有html+css代码的文件生成带有css格式PDF文件,因此没有添加到环境变量中,但愿有小伙伴使用wkhtmltopdf时,能够安装wkhtmltopdf到D:\Program Files下,而后添加到环境变量内,用php的shell_exec()使用一下,看看可否成功。函数