【问题标题】:What is mod_php?什么是 mod_php?
【发布时间】:2010-04-26 10:55:41
【问题描述】:

在查看Zend tutorial 时,我遇到了以下声明:

请注意,.htaccess 中的 php_flag 设置仅在您使用 mod_php 时有效。

谁能解释一下这是什么意思?

【问题讨论】:

    标签: php apache


    【解决方案1】:

    mod_php 表示 PHP,作为 Apache 模块

    基本上,当将mod_php 作为 Apache 模块加载时,它允许 Apache 解释 PHP 文件(这些文件由 mod_php 解释)


    编辑:在使用 Apache 时,(至少)有两种运行 PHP 的方法:

    • 使用 CGI :一个 PHP 进程由 Apache 启动,它是解释 PHP 代码的 PHP 进程——而不是 Apache 本身
    • 使用 PHP 作为 Apache 模块 (称为mod_php:PHP 解释器被“嵌入”在 Apache 进程中:没有外部 PHP进程 -- 这意味着 Apache 和 PHP 可以更好地通信


    并且在评论之后重新编辑:使用 CGI 或 mod_php 由您决定:这只是您的网络服务器的配置问题。

    要知道你的服务器当前使用哪种方式,你可以检查phpinfo()的输出:应该有一些东西表明PHP是否正在通过mod_php运行(或mod_php5 ,或通过 CGI。

    您可能还想看看php_sapi_name() 函数:它返回Web 服务器和PHP 之间的接口类型


    如果您检查 Apache 的配置文件,当使用 mod_php 时,应该有一个 LoadModule 行,如下所示:

    LoadModule php5_module        modules/libphp5.so
    

    (右边的文件名可以不同——例如在 Windows 上,它应该是 .dll

    【讨论】:

    • 我使用 xampp 安装了 php、apache 和 mysql 包...那么,我的设置是什么?
    • 如果 PHP 当前不工作,你应该启用它。如果 PHP 已经在工作,那么它必须使用 CGI,在这种情况下,您可能需要做的不仅仅是启用该模块。该模块甚至可能不存在于系统中。
    • 是的......!当我运行 phpinfo() 时,我看到 mod_php5 包含在 Loaded Modules 部分中……这意味着我已经将它作为 apache 模块运行……对吗?
    • mod_php 是迄今为止最常见的配置。
    • @Pascal,我想说mod_php 不是真正的PHP;它只是一个 Apache 插件。或者更确切地说,我认为您应该从定义 PHP 的含义 exactly 是什么? 开始回答。
    【解决方案2】:

    您的服务器需要安装 php 模块才能解析 php 代码。

    如果你在 ubuntu 上,你可以使用

    轻松做到这一点
    sudo apt-get install apache2
    
    sudo apt-get install php5
    
    sudo apt-get install libapache2-mod-php5
    
    sudo /etc/init.d/apache2 restart
    

    否则你可以用php编译apache:http://dan.drydog.com/apache2php.html

    指定您的服务器操作系统将有助于其他人更具体地回答。

    【讨论】:

      【解决方案3】:

      此答案取自TuxRadar

      通过 Web 服务器运行 PHP 时,有两种不同的选择:使用 PHP 的 CGI SAPI 运行它,或者将它作为 Web 服务器的模块运行。每个都有自己的优点,但总的来说,该模块通常是首选。

      将 PHP 作为 CGI 运行意味着您基本上告诉您的 Web 服务器 PHP 可执行文件的位置,并且服务器运行该可执行文件,并在您每次访问页面时将您调用的脚本提供给它。这意味着每次加载页面时,PHP 都需要读取 php.ini 并设置它的设置,它需要加载它的所有扩展,然后它需要开始解析脚本 - 有很多重复的工作。

      当您将 PHP 作为一个模块运行时,PHP 确实位于您的 Web 服务器中 - 它只启动一次,只加载一次其设置和扩展,并且还可以跨会话存储信息。例如,PHP 加速器依赖于 PHP 能够跨请求保存缓存数据,这在 CGI 版本中是不可能的。

      使用 PHP 作为模块的明显优势是速度 - 如果从 CGI 转换为模块,您将看到速度大幅提升。很多人,尤其是 Windows 用户,没有意识到这一点,继续使用 php.exe CGI SAPI,这是一种耻辱 - 该模块通常快三到五倍。

      不过,使用 CGI 版本有一个关键优势,那就是 PHP 在每次加载页面时都会读取其设置。将 PHP 作为模块运行时,您在 php.ini 文件中所做的任何更改都不会生效,直到您重新启动 Web 服务器,如果您正在测试大量新设置并希望看到即时响应,这使得 CGI 版本更可取。

      【讨论】:

      • @JohannEchavarria,除非你添加了很多疯狂的东西,否则重启服务器只需要几秒钟。对于带有 SSD 的“普通”现代系统,它不到 2 秒。
      【解决方案4】:

      补充一下这些答案是,mod_php 是 HTTPD 服务器中使用 PHP 的最古老和最慢的方法。不建议这样做,除非您运行的是旧版本的 Apache HTTPD 和 PHP。 PHP-FPM 和 proxy_cgi 是首选方法。

      【讨论】:

        【解决方案5】:

        mod_php 是一个 PHP 解释器。

        从文档中,mod_php 的一个重要收获是,

        “mod_php 不是线程安全的,它迫使你坚持使用 prefork mpm(多进程,无线程),这是最慢的配置”

        【讨论】:

          【解决方案6】:

          这意味着您必须将 PHP 作为一个模块安装在 Apache 中,而不是作为 CGI 脚本启动它。

          【讨论】:

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