PHP调用python

来源:互联网 发布:怎么找淘宝刷手 编辑:程序博客网 时间:2024/04/27 22:56

今天突发奇想想用PHP接受POST表单,用python做运算,毕竟python灵活度更高,工作也需要用到,顺便用于练习了。

有几种方法:

1. 用php自带函数 

exec()、 system()、 passthru()  php手册中有介绍,貌似都需要注意安全性问题,因为很有可能允许用户执行系统命令。python响应有延时时,system()和passthru()也都能成功,也就是说,php会等待程序执行完成才返回结果。使用起来非常方便,但是程序执行错误不容易发现。调试非常麻烦!


期间还遇到一个问题,就是由于运行目录变化,遇到python提示文件不存在的问题,只要给sys.path加入py脚本文件所在目录,并且把运行环境目录改为该脚本所在目录即可:

   

curpath=os.path.normpath(os.path.join(os.getcwd(),os.path.dirname(__file__)))sys.path.append(curpath)os.chdir(curpath)


另外编码的问题耗费了好长时间,擦泪啊,搞了好久,最终解决办法是套了原先的测试模板.....不添加以外的编码代码,如下:

some.py
------------------------------------------

#!/usr/bin/env python#-*- coding:utf-8 -*-import sysdef do_some(a):    return "dosome:%s" % aif __name__ == '__main__':    a = sys.argv[1]if a:    T = do_some(a)print T


-------------------------------------------
t.php

<?php$k = $_REQUEST['k'];if (!empty($k)){$k = trim($k);//    $a = array();//    exec('python ./some.py '.$k, $a);//    echo $a[0];passthru('python ./some.py '.$k);}


编码问题太恶心了,涉及apache2配置、php5配置、html配置、系统配置、python配置。。。。。。一大堆地方,说明自己还不够精通。


2. 使用socket,或者上thrift,因为前几天刚好看了thrift,thrift的好处是只要写一次,什么语言都一样支持了。

简单的PHP与Python间Socket通信

python如何为php写后端

       

还是尝试了thrift,首先安装python环境,要在thrift下载下来的lib文件夹中执行py文件,相关的例子网上很多

再安装php环境,感觉这个有些奇怪,

1.copy lib/php/src 和 lib/php/lib/Thrift下所有文件到了 var/lib/Thrift中,后面这个目录是自己选择的;

2.进入 /thrift/lib/php/src/ext/thrift_protocol 下,运行

phpize./configure --enable-thrift_protocolmake
make install
然后折腾了好一会儿。。。。。。最后解决办法是按照tutorial中的目录结构,文件原封不动复制过去。。。遇到一些命名空间的问题,加 些空间的‘//’ 解决了!!!!


终于搞定,效率大大提高,有空继续优化一下

3. 还查到一个开源项目ppython

    见 https://code.google.com/p/ppython/ 也是采用的socket通信


全文参考:

http://www.dewen.org/q/10007/php%E4%BC%A0%E9%80%92%E5%8F%82%E6%95%B0%E7%BB%99python

原创粉丝点击