linux php 执行python,Linux(Ubuntu)下php使用exec调用python程序返回json数据
問題起因:解決亂碼問題,及解決PHP調用python外部程序的權限問題
數據中帶有中文,數據來自python讀取微軟數據庫mssql2005 server的數據
操作注意事項主要有兩點:
1.python返回的編碼必須為utf-8
(1)?? ?必須導入codecs模塊,操作代碼如下:
import codecs
# 重要,必須要加上才能轉為utf-8
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
(2) 這里使json格式返回,并非必要.
print(json.dumps(data,ensure_ascii=False))
這里的data是字典格式,方便轉為合理的json格式。
2.php端在使用exec調用python外部程序時,必須使用$set_charset = 'export LANG=en_US.UTF-8;'加在調用的命令前面。如:
(1)//Linux版本
$cmd = "python? test.py? {$djdm}";
$set_charset = 'export LANG=en_US.UTF-8;';
exec($set_charset.$cmd,$res_data,$res_state);
(2)//Windown版本 不能使用$set_charset = 'export LANG=en_US.UTF-8;'加在調用的命令前面.
//Window版本
$cmd = "python ".PLUG_IN_DJBREAKS." {$djdm}";
exec($cmd,$res_data,$res_state)
;
3.必須授權apache用戶給php項目文件夾或在調用exec命令的php文件
授權方法:
(1)先查詢apache的用戶是哪了個
在apache的配置文件apache2.conf查找User 和 Group (User用戶和Group用戶組)是什么。
如這里查到User和Group都是www-data
(2)進入etc目錄并修改文件sudoers,增加用戶和組www-data
在root下面增加www-data修改如下:
root??? ALL=(ALL:ALL) ALL
www-data ALL=(ALL) NOPASSWD:ALL
注意sudoers是只讀文件,使用超級管理員修改權限 sudo chmod 777 sudoers ,再修改 sudo vim sudoers.修改完收回權限。
(3)使用ls -l查看php項目文件夾的用戶和組是否為www-data.如果不是,則使用下面命令授權
chown -R www-data:www-data SPB_SYS
這里的SPB_SYS是項目目錄.
總結
以上是生活随笔為你收集整理的linux php 执行python,Linux(Ubuntu)下php使用exec调用python程序返回json数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux复制文件夹到另一个目录_Lin
- 下一篇: mysql hma 分布式_mysql基