您现在的位置是: 首页 > 服务器 服务器
windows+PHP+shell_exec()无法执行的原因
冬寂
2020-08-05 23:15:08
【服务器】
5466人已围观
今天使用shell_exec()命令执行wkhtmltopdf.exe 生成pdf文件时,总是无法生成PDF文件,使用var_dump()打印返回值,结果是null。可是检查代码并没有什么问题啊?执行程序的目录是
D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe
好吧,接下来找找原因。
1、通过dos执行wkhtmltopdf程序
首先测试通过dos命令行执行wkhtmltopdf程序:
执行成功,没有问题。
查看pdf文件是否成功生成:
文件同样成功生成。
这说明程序执行没有问题。
2、PHP安全模式
网上说PHP安全模式会影响到shell_php()函数的执行。我查了一下,发现php.ini中安全模式只有
[SQL]
; http://php.net/sql.safe-mode
sql.safe_mode = Off
没有其他的安全模式。而且安全模式还会影响exec()函数的使用,我之前曾经使用过exec()函数,所以不是安全模式的问题。
3、php.ini中disable_functions参数
百度时,有人说是php.ini配置文件中disable_funcitons=shell_exec()。禁用了shell_exec()函数。好吧,php.ini默认disable_funcitons= (null)。看来不是这里的原因呢。
4、程序执行目录问题
之后,我有检查了一下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文件。
5、环境变量问题
此外把文件添加到环境变量中,可以不用带目录执行wkhtmltopdf程序。只不过,因为是测试wkhtmltopdf是否能执行含有html+css代码的文件生成带有css格式PDF文件,所以没有添加到环境变量中,希望有小伙伴使用wkhtmltopdf时,可以安装wkhtmltopdf到D:\Program Files下,然后添加到环境变量内,用php的shell_exec()使用一下,看看能否成功。
上一篇: 基于workerman即时通讯客服系统源码(thinkPHP)
下一篇: 没有了!
相关文章
随机图文
-
想买黄金饰品,市场上不同品牌价格差别大,怎么选择更加保值的金饰?
黄金饰品既有装饰功能,又能即时变现。但大部分的黄金饰品在回收变现时价格都会有波动,想选择更加保值的产品,并不容易。 -
当我读了4000期《时代》周刊以后(The TIME Project)
在2013年到2017年期间,我阅读了从1923年到2000年的每一期《时代》杂志,总共将近4000期,同时也相当于是研读了77年有价值的历史。一开始,我只是把这项阅读工程当成一种追踪经济历史的方式,但最后的落脚点却是个人变革。通过一周接一周地阅读一代又一代人出版的《时代》,我能够观察与感知到历史画卷在我面前徐徐展开。这个经历最终改变了我的生活方式。原作者Scott Krisiloff -
AI:道可道,非常道
关于AI和人类关系的未来有三种信仰,你看看你相信哪一种—— 第一种是「降临派」 第二种是「拯救派」 第三种是「幸存派」 -
MYSQL取随机数据
MYSQL取随机数据