windows+PHP+shell_exec()无法执行的原因
今天使用shell_exec()命令執(zhí)行wkhtmltopdf.exe 生成pdf文件時,總是無法生成PDF文件,使用var_dump()打印返回值,結(jié)果是null。可是檢查代碼并沒有什么問題啊?執(zhí)行程序的目錄是
D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe
好吧,接下來找找原因。
1、通過dos執(zhí)行wkhtmltopdf程序
首先測試通過dos命令行執(zhí)行wkhtmltopdf程序:
執(zhí)行成功,沒有問題。
查看pdf文件是否成功生成:
文件同樣成功生成。
這說明程序執(zhí)行沒有問題。
2、PHP安全模式
網(wǎng)上說PHP安全模式會影響到shell_php()函數(shù)的執(zhí)行。我查了一下,發(fā)現(xiàn)php.ini中安全模式只有
[SQL] ; http://php.net/sql.safe-mode sql.safe_mode = Off沒有其他的安全模式。而且安全模式還會影響exec()函數(shù)的使用,我之前曾經(jīng)使用過exec()函數(shù),所以不是安全模式的問題。
3、php.ini中disable_functions參數(shù)
百度時,有人說是php.ini配置文件中disable_funcitons=shell_exec()。禁用了shell_exec()函數(shù)。好吧,php.ini默認(rèn)disable_funcitons= (null)。看來不是這里的原因呢。
4、程序執(zhí)行目錄問題
之后,我有檢查了一下shell_exec()的執(zhí)行代碼,發(fā)現(xiàn)執(zhí)行目錄
D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe有問題。
在第二個目錄Program Files中有空格存在,之前考慮到不能含有中文的問題,所以安裝wkhtmltopdf時,走的是D盤下的默認(rèn)目錄(本來是C盤,我改為D盤了)。既然不能走中文目錄,是不是含有空格的目錄也是不行的呢?于是我就把D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe改為D:\wkhtmltopdf\bin\wkhtmltopdf.exe。然后修改了shell_exec()執(zhí)行代碼的執(zhí)行目錄。
最后執(zhí)行成功,生成了pdf文件。
5、環(huán)境變量問題
此外把文件添加到環(huán)境變量中,可以不用帶目錄執(zhí)行wkhtmltopdf程序。只不過,因為是測試wkhtmltopdf是否能執(zhí)行含有html+css代碼的文件生成帶有css格式PDF文件,所以沒有添加到環(huán)境變量中,希望有小伙伴使用wkhtmltopdf時,可以安裝wkhtmltopdf到D:\Program Files下,然后添加到環(huán)境變量內(nèi),用php的shell_exec()使用一下,看看能否成功。
總結(jié)
以上是生活随笔為你收集整理的windows+PHP+shell_exec()无法执行的原因的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么通过路径藏值,然后通过js,jq获取
- 下一篇: VO,BO,PO,DO,DTO的区别