问题起因:解决乱码问题,及解决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是项目目录.