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格式。

820bbf7b13e8347ea0a2b00743106db3.png

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)

;

998e6872c2c81e096e564672e29e9542.png

3.必须授权apache用户给php项目文件夹或在调用exec命令的php文件

授权方法:

(1)先查询apache的用户是哪了个

在apache的配置文件apache2.conf查找User 和 Group (User用户和Group用户组)是什么。

如这里查到User和Group都是www-data

4281bf8dd32e53520e54f7f0431a0c07.png

e17c5c08f973ba2a47e04061574619be.png

(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.修改完收回权限。

d11b5fb89b9441bf767101a1e2edad7f.png

(3)使用ls -l查看php项目文件夹的用户和组是否为www-data.如果不是,则使用下面命令授权

chown -R www-data:www-data SPB_SYS

这里的SPB_SYS是项目目录.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值