php 怎么执行unoconv,web执行php调用exec(unoconv)命令失败解决方案
本人環境:nginx?+?php-fpm
創建PHP文件如下:<?php
exec('unoconv?-f?pdf?/home/test.pptx',?$res,?$rc);
print($rc);
//?/home/test.pptx??是我的測試文件
//?exec有3個參數,第一個是要執行的命令,第二個是參數是一個數組,數組的值是由第一個命令執行后生成的,第三個參數執行的狀態,0表示成功,其他都表示失敗。
將該文件上傳服務器通過web中的url進行訪問后,打印exec的第三個參數rc為1,說明命令執行失敗,但確不知道原因
將代碼更改如下:<?php
exec('unoconv?-f?pdf?/home/test.pptx?2>&1',?$res,?$rc);
print($rc);
print($res);
使用 2>&1, 命令就會輸出shell執行時的錯誤到$res變量, 輸出該變量即可分析。
在次運行后,得到命令錯誤信息:0:?"Traceback?(most?recent?call?last):"
1:?"??File?"/usr/bin/unoconv",?line?1205,?in?"
2:?"????run()"
3:?"??File?"/usr/bin/unoconv",?line?1115,?in?run"
4:?"????office_environ(of)"
5:?"??File?"/usr/bin/unoconv",?line?202,?in?office_environ"
6:?"????os.environ['PATH']?=?realpath(office.basepath,?'program')?+?os.pathsep?+?os.environ['PATH']"
7:?"??File?"/usr/lib64/python2.7/UserDict.py",?line?23,?in?__getitem__"
8:?"????raise?KeyError(key)"
9:?"KeyError:?'PATH'"
這他niang是什么東西,貌似是python代碼出錯,最后有一個? "KeyError: 'PATH'"
此時在網上找了很多解決方案,嘗試無果,嘗試如下:
1,/usr/bin/unoconv 的執行權限改為777
2, /run/user/0/dconf? ?/run/user權限更改了 777
3, /ect/sudoers 增加了 :? wwwALL=(ALL)NOPASSWD: ALL
4,還更改了測試pptx文件權限為777
以上嘗試全部無果
最后在 github 上面找到一提問,從提問的回答中找到解決方案:
網頁地址:https://github.com/dagwieers/unoconv/issues/87#issuecomment-18800070%29
回答信息:centos?7.3?nginx?with?php?via?php-fpm,?the?env?in?php?is?cleaned?by?php-fpm
u?can?use?putenv?to?set?evn["PATH"]?in?php?code,?examples
putenv("PATH=/sbin:/bin:/usr/sbin:/usr/bin");
var_dump(shell_exec('unoconv?-vvvv?-f?pdf?-o?123.pdf?123.doc));
or?u?can?set?env?use?one?line?shell?cmd
var_dump(shell_exec('PATH=/sbin:/bin:/usr/sbin:/usr/bin'.'?unoconv?-vvvv?-f?pdf?-o?123.pdf?123.doc));
or?u?can?change?php-fpm.d/www.conf?to?pass?the?env?to?php,?add?this?line
clean_env?=?no
and?the?restart?php-fpm
systemctl?restart?php-fpm.service
發現和我的環境與問題是一致的,于是開始嘗試<?php
exec('PATH=/sbin:/bin:/usr/sbin:/usr/bin?unoconv?-f?pdf?/home/test.pptx?2>&1',?$res,?$rc);
print($rc);
print($res);
在次運行發現轉換成功
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的php 怎么执行unoconv,web执行php调用exec(unoconv)命令失败解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 短域名php,php生成短域名函数_PH
- 下一篇: nginx虚拟目录支持PHP,nginx