零、前言
1、我用的是 LNMP 环境,好像 第三、四步 都不用做,因为默认的 “disable_functions=” 后面为空,也就是没有禁用掉相关的功能。
一、具体实现步骤如下:
1, 将php文件,python文件放在通过一个目录下。或者写明python程序绝对路径。
2,注意文件的可读写或执行权限
3,修改php位置文件:php.ini
sudo vim /etc/php5/apache2/php.ini
找到 disable_functions=…….; 将里边禁用的pcntl_exec删除掉!
4, 重启apache2 : sudo service apache2 restart
5, web服务器用的用户路径里可能没有python。php中调用python时写上绝对地址
二、相关的代码(尽量把相关的东西放到相同文件夹啥的,这样路径就比较好处理了)
1、test.php
<?php
// 报告详细的错误
ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);
echo 'test.php</br>';
$program="python3 /data/wwwroot/www.example.com/api/test.py";
echo exec($program);
?>
2、test.py
print('开始test.py');
print('中间test.py');
print('最后test.py');
3、输出结果
输出最后一个 —— '最后test.py'
三、总结
1、如果py文件有中文,就不会进行输出!!应该需要设置一些东西吧!!!需要在test.py 第一行写上 # coding: GBK ;只有这样才能正常输出中文。可以先在服务器cmd里面去跑、调试 py文件!!
2、尽量使用 shell_exec(可以输出所py里面的输出) ,而不是 exec(只会输出最后一个 print) 函数,因为 后者只会输出 py输出列表里面的最后面一个,前面不会输出(“存在输出覆盖问题”),前者 shell_exec 会输出py输出的所有内容!!
shell_exec 如下:
exec如下: