免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8849 | 回复: 11
打印 上一主题 下一主题

有没有简单的让python的web服务器运行PHP脚本的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-19 14:17 |只看该作者 |倒序浏览
我知道用python实现一个web服务器非常简单,只需要简短的几行代码,就可以开发出支持HTML静态网页的web服务器,再多加几行代码,就可以以CGI的模式运行python脚本,从而开发动态网站。

那么python有没有简单的方法去支持PHP呢?CGI模式或ISAPI模式都可以,只要让它能运行PHP,哪位大侠可以提供一个最原始的demo吗,在下不胜感激。


我想实现一种在个人PC上解压即可运行的网站系统或者WEB软件,用py2exe打包web.py或Django框架下开发的网站很容易实现,但毕竟python开发的web应用不如PHP多(在国内),所以我想用python实现服务器部分,网站程序用PHP,然后打包,让用户在电脑上解压即可运行网站。虽然已经有PHPNOW等软件可以让部署PHP环境非常简单,但我认为还不够傻瓜化,我想用python做一个更简单的,让用户感觉不到PHP、PYTHON等技术的存在,解压后即可使用

论坛徽章:
0
2 [报告]
发表于 2010-03-19 15:06 |只看该作者
本帖最后由 luffy.deng 于 2010-03-19 15:08 编辑

你是用Python写web应用 还是用"python实现一个web服务器"?理论上如果你在你的webserver里实现了cgi协议 可以以cgi的方式运行python  那么不需要多余的工作就可以用php,cgi是语言无关的。

论坛徽章:
0
3 [报告]
发表于 2010-03-19 15:22 |只看该作者
是用"python实现一个web服务器"

这里有简单的支持cgi的方法 http://www.lpfrx.com/archives/133/

py脚本好像是在代码顶部调用的解释器
#!c:/Python24/python.exe

print "HTTP/1.0 200 OK"
print "Content-Type: text/html"
print ""
print "<p>"
print "Hello World!"
print "</p>"
PHP脚本也得在顶部调用解释器才可以吗?如果这样就必须得把PHP解释器放在固定位置了,没法随处解压了

论坛徽章:
0
4 [报告]
发表于 2010-03-19 16:47 |只看该作者
#!c:/Python24/python.exe
这个对win32不起作用

论坛徽章:
0
5 [报告]
发表于 2010-03-19 17:14 |只看该作者
下面的脚本运行我在3楼写的CGI脚本就可以
  1. from CGIHTTPServer import CGIHTTPRequestHandler  
  2. from BaseHTTPServer import HTTPServer     
  3. server_address=('',7777)  
  4. httpd = HTTPServer(server_address, CGIHTTPRequestHandler)  
  5. httpd.serve_forever()
复制代码
运行PHP脚本就不可以,请问PHP的解释器在哪里加载呢

代码摘自http://www.lpfrx.com/archives/133/ 里面的 web3.py

论坛徽章:
0
6 [报告]
发表于 2010-03-19 17:17 |只看该作者
win32下你只需要做文件关联就可以了。#!  只对shell起作用。

论坛徽章:
0
7 [报告]
发表于 2010-03-19 18:10 |只看该作者
在这个简单的web服务器中怎么关联php.exe啊,请大侠赐教
  1. from CGIHTTPServer import CGIHTTPRequestHandler  
  2. from BaseHTTPServer import HTTPServer     
  3. server_address=('',7777)  
  4. httpd = HTTPServer(server_address, CGIHTTPRequestHandler)  
  5. httpd.serve_forever()
复制代码

论坛徽章:
0
8 [报告]
发表于 2010-03-19 23:38 |只看该作者
本帖最后由 luffy.deng 于 2010-03-20 08:40 编辑

非常不幸  CGIHTTPRequestHandler  的run_cgi方法对非python文件要判断是否可执行,判断的方法是
st.st_mode & 0111 != 0    在win32下所有的  .php文件计算结果都是False。你可以到linux下试一下。

论坛徽章:
0
9 [报告]
发表于 2010-03-20 12:24 |只看该作者
本帖最后由 luffy.deng 于 2010-03-20 12:29 编辑

可以对CGIHTTPServer稍加修改使用php,附件里mCGIHTTPServer是我改过的在284行我把php解析器路径写死了,这个你可以自己改一下 ,使用环境变量或者解析.php文件的第一行#!指示符后面内容。
  1.             if self.is_php(scriptfile):
  2.                 interp = "d:\\php\\php.exe"
  3.                 cmdline = "%s  %s" % (interp, cmdline)
复制代码
经测试可以使用,cgiserver是这样的
  1. from mCGIHTTPServer import CGIHTTPRequestHandler  
  2. from BaseHTTPServer import HTTPServer     
  3. server_address=('',7777)  
  4. httpd = HTTPServer(server_address, CGIHTTPRequestHandler)  
  5. httpd.serve_forever()
复制代码
使用的php文件
  1. <html>
  2. <head>
  3. <title>First program</title>
  4. </head>
  5. <body>
  6. <?php
  7.   echo "hello, world\n";
  8. ?>
  9. </body>
  10. </html>
复制代码
在浏览器地址栏输入http://localhost:7777/cgi-bin/hello.php可以hello, world.

mCGIHTTPServer.7z

3.98 KB, 下载次数: 66

论坛徽章:
0
10 [报告]
发表于 2010-03-20 12:29 |只看该作者
谢谢luffy.deng朋友不厌其烦的帮助,我想出来一个方法了:

用os.popen运行php.exe,然后捕获输出的内容
  1. import os
  2. str = os.popen("php.exe test.php").read()
  3. print str
复制代码
只是不知道这样的效率如何,我再多测试测试吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP