CGIHTTPRequestHandler 在 python 中运行 php 或 python 脚本

frx*_*x08 5 python webserver cgi cgihttprequesthandler

我正在 Windows 上编写一个简单的 python Web 服务器..

它可以工作,但现在我想运行动态脚本(php 或 py)而不仅仅是 html 页面..

这是我的代码:

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler

class RequestsHandler(CGIHTTPRequestHandler):
    cgi_directories = ["/www"] #to run all scripts in '/www' folder
    def do_GET(self):
        try:
            f = open(curdir + sep + '/www' + self.path)
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(f.read())
            f.close()
        except IOError:
            self.send_error(404, "Page '%s' not found" % self.path)

def main():
    try:
        server = HTTPServer(('', 80), RequestsHandler)
        server.serve_forever()
    except KeyboardInterrupt:
        server.socket.close()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

如果我将 php 代码放在 www 文件夹中,我会得到该页面,但代码不会被解释

我必须做什么?谢谢

Tod*_*odd 6

您的第一个 Python CGI 网站

对于制作第一个 Web 服务器的人,我将这个简单的示例与使其正常工作所需的所有步骤放在一起。需要创建两个文件。第一个是server.py是运行 Web 服务器的脚本。第二个是 Python CGI 脚本,服务器将运行该脚本并将其输出作为“网页”发送到浏览器。

首先为服务器创建一个项目文件夹,例如主目录中的simple_server或您喜欢放置项目的任何位置。

在该文件夹中创建一个名为cgi-bin的子文件夹。然后将第一个脚本复制到文件server.py并将其放置在simple_server中。然后创建文件my_cgi_script.py并将其放置在cgi-bin文件夹中。这些文件位于本指南正文的下方。

目录结构应如下所示:

|
-- [simple_server]
      |
      -- server.py
      |
      -- [cgi-bin]
            |
            -- my_cgi_script.py
Run Code Online (Sandbox Code Playgroud)

您需要设置my_cgi_script.py的权限以使其可执行 - 否则 Web 服务器无法运行它来生成网页输出。如果您使用的是 Linux 或 MacOS,请在命令 shell 中输入:

$ chmod +x cgi-bin/my_cgi_script.py
Run Code Online (Sandbox Code Playgroud)

在 Windows 上,使用文件资源管理器找到该文件并右键单击它,并确保其权限允许执行。

打开命令 shell,cd进入simple_server文件夹并执行server.py脚本:

$ cd simple_server
$ python server.py
Run Code Online (Sandbox Code Playgroud)

到目前为止,它应该静默运行,没有任何输出。然后在您喜爱的浏览器的新选项卡中,浏览到以下 URL:

http://localhost:8000/cgi-bin/my_cgi_script.py
Run Code Online (Sandbox Code Playgroud)

“你好世界!” 应该会像网页一样出现在浏览器中并带有大量空白(如果您没有立即看到它,请在左上角查找)。好了,你已经做到了!您已经使用 Python CGI 制作了您的第一个网站!

服务器.py

from http.server import HTTPServer, CGIHTTPRequestHandler

if __name__ == '__main__':
    try:
        CGIHTTPRequestHandler.cgi_directories = ['/cgi-bin']

        httpd = HTTPServer(('', 8000),             # localhost:8000
                           CGIHTTPRequestHandler)  # CGI support.

        print(f"Running server. Use [ctrl]-c to terminate.")

        httpd.serve_forever()

    except KeyboardInterrupt:
        print(f"\nReceived keyboard interrupt. Shutting down server.")
        httpd.socket.close()
Run Code Online (Sandbox Code Playgroud)

cgi-bin/my_cgi_script.py

#!/usr/bin/env python
# The line above ^ is important. Don't leave it out. It should be at the
# top of the file.

import cgi, cgitb # Not used, but will be needed later.

print("Content-type: text/html\n\n")
print("hello world!")
Run Code Online (Sandbox Code Playgroud)

如果你让它运行,你可能想知道“刚刚发生了什么?” server.py设置并正在运行一个 Web 服务器。它被配置为使用CGIHTTPRequestHandler. 此请求处理程序将运行cgi-bin文件夹中的文件作为脚本。它使用命令 shell 来执行此操作。

在my_cgi_script.py的顶部,该#!/usr/bin/env python行告诉命令 shell 使用 Python 解释器执行文件中的代码。

您在浏览器中输入的 URL 会被服务器理解为文件的路径 - 在本例中为 CGI 脚本my_cgi_script.py,位于cgi-bin文件夹下:http://localhost:8000/cgi-bin/my_cgi_script.py

如果您查看服务器运行的命令 shell,您可以看到详细说明其处理的 Web 流量的消息。每次您访问此服务器进程时,它都会输出更多消息 - 继续尝试在浏览器中刷新并观看它。

您现在可以修改my_cgi_script.py以输出更多文本,或者可以让它输出 HTML 标记并生成更有趣的网页。

要创建包含 CGI 脚本的网页,请创建一个名为index.html的文件,并将其放置在包含server.py 的文件夹中- index.html的内容如下。

索引.html

<!DOCTYPE html>
<html>
  <body>

    <h1>My First Heading</h1>
    <p>My first paragraph.</p>

    <!-- Simple example to include text from the CGI script in this web page. -->

    <object type="text/html" data="/cgi-bin/my_cgi_script.py"></object>

  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

目录结构现在应如下所示:

|
-- [simple_server]
      |
      -- server.py
      |
      -- index.html
      |
      -- [cgi-bin]
            |
            -- my_cgi_script.py
Run Code Online (Sandbox Code Playgroud)

完成后,如果您停止了服务器进程,请再次启动它并尝试浏览http://localhost:8000并验证您是否看到“hello world!” 在“我的第一段”下面。index.html是一个特殊的文件名,Web 服务器将其用作其 URL 的默认页面。现在您已具备创建出色网站的所有基础知识!

展望未来,对于学习或认真开发的最佳 Web 开发框架应该是什么,存在着各种不同的观点。从这个示例中,您应该了解非常基本的配置、设置和浏览器/服务器交互。

那么现在的问题是,接下来该何去何从?您可以继续追求上述模型,并学习如何使用 Python CGI 脚本将更多功能添加到基本站点中,并将它们绑定到 HTML 页面中的表单操作。这将是一条完全有效的路径,你可能会学到很多东西。

有人向我推荐了一个很好的网站,它使用名为 Django 的生产质量 W​​eb 服务器。据我所知,它有非常好的教程和其他资源来帮助开始 Web 开发。

该网站是 Django Girls 教程。不要被网站的名称吓倒,任何人都可以从本教程中受益,它很好地介绍了使用 Django 进行 Web 开发所需的工具和技术。

Django Girls 是一个活跃的女性开发者社区,在世界各地举办活动,并将她们与其他可以帮助她们进步的人联系起来。

Django 女孩教程:https://tutorial.djangogirls.org/en/

更深入的Python CGI示例:https://www.tutorialspoint.com/python/python_cgi_programming.htm

对于学习 HTML,这个网站有很好的教程:https ://www.w3schools.com/html/default.asp

关于 CGI 支持模块cgi 的参考:https ://docs.python.org/3/library/cgi.html

包含本示例中使用的类的文档可以在以下位置找到:https ://docs.python.org/2/library/internet.html


Bra*_*yon 1

你使php文件可执行吗?chmod +x spam.php (对于 Linux,我不知道如何使文件在 Windows 上可执行)

您还需要在 PC 上安装 PHP 解释器

来源来自此处的回复

您还应该考虑使用作为间接替代方案。