什么是mod_php?

Spi*_*idE 102 php apache

在阅读Zend教程时,我发现了以下声明:

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

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

Pas*_*TIN 149

mod_php表示PHP,作为Apache模块.

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


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

  • 使用CGI:Apache启动了一个PHP进程,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
Run Code Online (Sandbox Code Playgroud)

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

  • `mod_php`是目前最常见的配置. (3认同)

Spi*_*idE 57

这个答案取自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版本更受欢迎.


cda*_*ted 10

您的服务器需要安装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
Run Code Online (Sandbox Code Playgroud)

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

指定服务器操作系统将帮助其他人更具体地回答.


Tej*_*ade 8

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


Ond*_*ták 5

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