php如何调用python程序并得到返回值?
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔碰到了个非常有意思的python
程序,想把这个功能集成到我的网站功能里面。但是,想想要把这个python
翻译成php
,想想就是很痛苦的事情。
以前闲的无聊的时候,苏南大叔曾经把e
语言的翻译成c#
的。还曾经把汇编
通过od
的插件翻译成c++
,然后再翻译成c#
,或者把c#
的翻译成php
的,把js
的翻译成php
的,诸如此类。有的时候,就觉得,现在这么多编程语言,真心是折磨人啊。
本文中,苏南大叔举例说明了,如何在php
中调用python
的功能。涉及的这个python
模块叫做myqr
,大家可以在github
上面找到相关链接。
本文测试环境:centos7
/php71
/python27
。
设置disable_functions
想想看,转译这个功能的话,既然这么痛苦,那么是不是可以直接调用python
功能呢?然后苏南大叔仔细实验了一下,还真是可以的。
这里就涉及到一个php.ini
的设置叫做:disable_functions
。默认的情况下,这里禁用了好几个函数,因为这些函数可能会给你的系统造成危害。
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru
而调用python
就需要exec
或者shell_exec
或者system
函数。本次实验中,苏南大叔选择的是exec
。
php
调用python
范例
代码如下:
exec("myqr http://yourdomain -p test.gif -c -n qrcode.gif 2>&1;", $array, $ret);
$array
里面是命令的返回值输出,就是直接在ternimal
里面输入命令看到的文字。- 而命令行里面的
2>&1
是重定向输出的意思,必须加上这句话,$array
才会有数值。$ret
表示返回值,如果不是0,那就是调用失败,出错了。
这个实验的过程,也不是一帆风顺的,这里也是多次修正,才得出这些结论。至于我的实验对象,myqr
,其实在我centos
下面也报错了,具体的以后再写文章说这事。
宝塔设置php.ini
下图是宝塔面板里面的相关配置界面,不过这个是全局配置,会影响所有的站点。
相关文章
小结论
题外话:上述exec
的最后两个参数$array
和$ret
,从使用角度上来看,就是2个引用类型的参数。这在hack语言里面是无法接受的。hack语言是不接受引用类型的。那么不知道,hack语言里面对于exec
这个危险函数是怎么处理的呢?且听下回分解。
更多python
相关的文章,请点击下面的链接查看:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。