什么是mod_php?

在阅读Zend教程的同时 ,我遇到了以下的说法:

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

有人可以解释这是什么意思?

mod_php表示PHP,作为Apache模块

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

编辑:至less有两种运行PHP的方式,当使用Apache:

  • 使用CGI :一个PHP进程由Apache启动,而PHP进程解释PHP代码 – 而不是Apache本身
  • 使用PHP作为Apache模块 (称为mod_php :PHP解释器在Apache过程中是“embedded式”的:没有外部PHP过程 – 这意味着Apache和PHP可以更好地交stream

重新编辑,注释之后 :使用CGI或mod_php取决于你:这只是你的web服务器的configuration问题。

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

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

如果你检查你的Apache的configuration文件,当使用mod_php ,应该有一个LoadModule行看起来像这样:

 LoadModule php5_module modules/libphp5.so 

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

这个答案取自TuxRadar :

在通过Web服务器运行PHP时,有两个不同的选项:使用PHP的CGI SAPI运行它,或者将其作为Web服务器的模块运行。 每个人都有自己的好处,但总的来说,这个模块通常是首选的。

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

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

使用PHP作为模块的明显优势在于速度 – 如果您将CGI转换为模块,您将看到很大的速度提升。 许多人,特别是Windows用户,并没有意识到这一点,并继续使用php.exe CGI SAPI,这是一个耻辱 – 模块通常快三到五倍。

不过,使用CGI版本有一个关键的好处,那就是每次载入页面时PHP都会读取它的设置。 以PHP作为模块运行,在php.ini文件中所做的任何更改都不会启动,除非重新启动Web服务器,如果要testing大量新设置并希望看到即时响应,则CGI版本更可取。

您的服务器需要安装php模块,以便parsingphp代码。

如果你在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

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

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