什么是mod_php?

2022-08-30 07:20:53

在学习Zend教程时,我遇到了以下语句:

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

有人能解释一下这意味着什么吗?


答案 1

mod_php意味着PHP,作为Apache模块

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


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

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


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

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

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


如果您签入Apache的配置文件,则在使用时,应该有一行如下所示:mod_phpLoadModule

LoadModule php5_module        modules/libphp5.so

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


答案 2

这个答案取自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版本更可取。


推荐