什么是mod_php?


108

在阅读Zend教程时,我遇到了以下声明:

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

有人可以解释什么意思吗?

Answers:


158

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由您决定:这仅是Web服务器的配置问题。

要知道服务器上当前使用的是哪种方式,您可以检查以下输出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软件包...那么,我的设置是什么?
SpikETidE

如果PHP当前不起作用,则应启用它。如果PHP已经在运行,则必须使用CGI,在这种情况下,您可能需要做的不仅仅是启用模块。该模块甚至可能在系统上不存在。
d11wtq 2010年

1
对..!。当我运行phpinfo()时,我看到mod_php5包含在“加载的模块”部分中……。这意味着我已经将其作为apache模块运行了……对吗?
SpikETidE

3
mod_php是迄今为止最常见的配置。
troelskn

@Pascal,我会说mod_php这不是真正的PHP;这只是一个Apache插件。或者更确切地说,我认为您应该从PHP 到底是什么意思的定义开始回答。
Pacerier,2016年

58

这个答案来自TuxRadar

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

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

当您将PHP作为模块运行时,PHP实际上位于您的Web服务器内部-它仅启动一次,仅加载一次其设置和扩展,还可以跨会话存储信息。例如,PHP加速器依靠PHP能够跨请求保存缓存的数据,而使用CGI版本则无法实现。

将PHP用作模块的明显优势是速度-如果将CGI转换为模块,将会大大提高速度。许多人,特别是Windows用户,并没有意识到这一点,而是继续使用php.exe CGI SAPI进行操作,这很可惜-模块的速度通常快三到五倍。

但是,使用CGI版本的一个主要优点是,每次加载页面时PHP都会读取其设置。使用PHP作为模块运行时,在重新启动Web服务器之前,对php.ini文件所做的任何更改都不会生效,如果要测试大量新设置并希望看到即时响应,则使CGI版本更可取。


@JohannEchavarria,除非您添加了很多疯狂的东西,否则重启服务器仅需几秒钟。对于带有SSD的“常规”现代系统,此时间不到2秒。
Pacerier '16

12

您的服务器需要安装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

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


0

mod_php是一个PHP解释器。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.