【问题标题】:mod_php vs mod_pythonmod_php 与 mod_python
【发布时间】:2009-05-16 16:01:54
【问题描述】:

为什么 mod_python 是 oop 而 mod_php 不是?

例子:我们去 www.example.com/dir1/dir2

如果你使用 mod_python apache 打开 www/dir1.py 并调用 dir2 方法 但是如果你使用 php 模块 apache 会打开 www/dir1/dir2/index.php

【问题讨论】:

  • 如何将 Apache 模块与编程语言进行比较?
  • 我将 mod_python 与 apache php 模块进行比较
  • 总是有人不加评论地投反对票
  • 我认为这是因为它的配方不好。我认为你应该考虑重新制定它。
  • 因为 mod_python 程序员想要一些 PHP 安全问题 :)

标签: php python mod-python


【解决方案1】:

让我们谈谈 mod_python 与 mod_php。

由于 Python 语言不是专门为网页服务而设计的,所以 mod_python 必须做一些额外的工作。

由于 PHP 语言是专门为网页服务而设计的,所以 mod_php 只需启动一个命名的 PHP 模块。

在 mod_python(不同于 mod_fastcgi 或 mod_wsgi)的情况下,mod_python 的设计者决定调用 Python 的最佳方式是调用模块中定义的对象的方法。希望该对象的该方法将标题和网页内容写入标准输出。

对于 mod_wsgi,设计者决定调用 Python 的最佳方式是调用模块中的函数(或可调用对象)。希望该函数将使用提供的对象来创建标题并返回包含网页内容的列表字符串。

在 mod_php 的情况下,它们只是调用模块,因为 PHP 模块是为网页服务而设计的。程序运行,运行的结果是一页内容;通常是 HTML。

mod_php 以一种方式工作,mod_python 以另一种方式工作而 mod_wsgi 以第三种方式工作的原因是因为它们是不同的。由不同的人编写,对产生网页的方式有不同的定义。

php 页面可以是面向对象的。 mod_wsgi 函数可能是一个可调用对象,也可能是一个简单函数。这些是设计选择。

类的 mod_python 要求是 mod_python 的设计者做出的设计选择。

“为什么”的理由从来没有用处。 “为什么”的原因是因为有人决定这样设计它。

【讨论】:

  • 首先感谢您的一般解释。我认为“为什么有人决定设计这个”的原因非常有用,这也是我问它的原因。
  • 不错的答案,但我不同意“为什么”的原因永远没有用。为什么对自学有用。
  • @User:不。实际上,它对任何人都没有帮助。真的。它根本不会改变@Oguz 编写程序的方式。它对任何人都没有帮助。解释为什么天空是蓝色的并不能使阳光明媚的日子变得更好。解释为什么下雪并没有让下雪天变得不那么冷。 “为什么”并没有太大帮助。
  • @S.Lott:这太荒谬了。选择排序算法时,应该使用哪一个?如果你不知道为什么要选择一个而不是另一个,你可能会选择一个次优的。 “为什么天空是蓝色的?”与“为什么选择 Postgresql 而不是 Mysql?(反之亦然)”不在同一类。
  • @User:你完全正确:“你为什么选择”是一个完全不同的问题。这个问题(“为什么 mod_python 是 oop 而 mod_php 不是?”)不如您的“为什么选择”示例那么好。这个问题相当于“为什么一美元被称为美元?”它对经济、商业或会计没有帮助。
【解决方案2】:

因为 mod_python 将 URL 抽象为“类 RPC”机制。您可以在 PHP 中实现相同的功能。我总是手工完成,但我很确定有为此预先打包的 pear 模块。

注意 mod_python 的行为并不是强行“最好的”。这一切都取决于您想为您的应用程序提供的设计类型,以及它对客户的行为方式。据我所知,mod_python 方法假定每个 URL 都有一个函数,例如将模块结构映射到 URL 树。从技术上讲,这不是一个特别好的方法,因为您使用的技术 (mod_python) 与应用程序的 URL 布局之间存在紧密的关联。

为什么的原因,没有理由。有些人喜欢一种食物,有些人喜欢另一种食物。在某些情况下,设计是品味和艺术选择的问题,而不仅仅是技术限制。

【讨论】:

  • python你喜欢什么
  • 我使用 django 进行 web 开发
  • 但是,当链接集中生成时,更改 URL 布局会更容易。
【解决方案3】:

我认为您对 HTTP 的工作原理有一些误解。 http 标准中没有任何内容要求您将某个文件作为资源。这就是 mod_php 的工作方式,对于给定的路径,该路径被翻译成服务器磁盘上的 php 文件,然后由编译器解释。

另一方面,mod_python 模块更加通用,它允许您将任何资源映射到对某个 python 对象的调用。碰巧有些配置是开箱即用的,以使其更容易开始。在大多数情况下,url 的调度由您的框架管理,其工作方式取决于框架实现者。

由于 mod_python 模块的通用特性,您还可以访问 mod_php 模块中不可用的一些 apache 功能,例如,您可以编写您的自己的身份验证处理程序,我不仅适用于您的 python webapp,还适用于您的 apache 中的其他应用程序。

【讨论】:

    【解决方案4】:

    在 PHP 中,您可以使用自上而下的脚本、过程编程和函数调用、OOP 对网页进行编程。这是最初创建 PHP 以及它如何发展的主要原因。 mod_php 只是 web 服务器使用 PHP 作为预处理器的模块。所以它只是将 HTTP 信息和 PHP 脚本传递给 PHP 解释器。 网页创建的PHP方式是做你想做的;编写一个从上到下的脚本,在不同的文件中定义函数并包含这些函数并调用函数,或者用 OOP 编写您的应用程序,您现在还可以使用许多功能齐全的框架来确保您的应用程序设计和结构符合当今的最佳实践和设计模式。

    我是 Python 新手,不熟悉使用 Python 进行 Web 编程。但据我所知,创建 python 并不是为了让 Web 编程更容易。它旨在成为一种通用编程语言,因此尽管可以在 python 中编写简单的从上到下的脚本并将它们作为网页响应运行(我不确定这样的事情是否可能),但它是不是 Python 的方式,所以我认为 mod_python 的开发人员希望 Python 中的 Web 编程采用 Python 的方式。

    【讨论】:

      【解决方案5】:

      也许我误解了你的问题,但是 Python 和 PHP 都支持过程和面向对象的编程。 (尽管有人可能会说 Python 对 OO 的支持是两者中更强的。)

      【讨论】:

      • 我将 mod_python 与 apache php 模块进行比较
      【解决方案6】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-29
        • 2011-02-01
        • 2015-02-14
        • 2019-02-22
        • 1970-01-01
        • 2012-02-28
        • 2016-05-19
        • 2021-06-05
        相关资源
        最近更新 更多