什么是mod_php?

时间:2010-04-26 10:55:41

标签: php apache

在浏览Zend tutorial时,我发现了以下声明:

  

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

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

6 个答案:

答案 0 :(得分:141)

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 运行的(或{{1} }),或通过CGI。

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


如果您签入Apache的配置文件,那么在使用mod_php5时,应该有mod_php行,如下所示:

LoadModule

(右侧的文件名可以不同 - 例如,在Windows上,它应该是LoadModule php5_module modules/libphp5.so

答案 1 :(得分:56)

此答案取自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版本更受欢迎。

答案 2 :(得分:9)

您的服务器需要安装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 :(得分:4)

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

答案 4 :(得分:1)

只需在这些答案上加上,mod_php是HTTPD服务器中用户PHP可用的最古老,最慢的方法。除非您正在运行旧版本的Apache HTTPD和PHP,否则不建议使用。 php-fpm和proxy_cgi是首选方法。

答案 5 :(得分:0)

mod_php是一个PHP解释器。

从文档中可以看到,mod_php的一个重要收获是

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