What is mod_php?

在进行 Zend tutorial测试时,我发现了以下声明:

请注意,. htaccess 中的 php _ Flag 设置只有在使用 mod _ php 时才能工作。

有人能解释一下这是什么意思吗?

144335 次浏览

mod_php 表示 PHP,作为 阿帕奇模块

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


EDIT : There are (至少) two ways of running PHP, when working with Apache :

  • 使用 CGI: Apache 启动一个 PHP 进程,正是这个 PHP 进程解释 PHP 代码,而不是 Apache 本身
  • 使用 PHP 作为 阿帕奇模块 (称为 mod_php): PHP 解释器在 Apache 进程中是“嵌入式”的: 没有外部 PHP 进程——这意味着 Apache 和 PHP 可以更好地使用 沟通


And 在评论之后重新编辑 : using CGI or mod_php is up to you : it's only a matter of configuration of your webserver.

要了解当前在服务器上使用的方式,可以检查 phpinfo()的输出: 应该有一些内容指示 PHP 是通过 mod_php (或 mod_php5)运行,还是通过 CGI 运行。

您可能还想了解一下 强 > php_sapi_name()函数: it 返回 Web 服务器和 PHP 之间的接口类型


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

LoadModule php5_module        modules/libphp5.so

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

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

Your server needs to have the php modules installed so it can parse php code.

如果你使用 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: http://dan.drydog.com/apache2php.html编译 apache

指定您的服务器操作系统将帮助其他人更具体地回答问题。

This answer is taken from TuxRadar:

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

作为 CGI 运行 PHP 意味着你基本上告诉你的网络服务器 PHP 可执行文件的位置,并且服务器运行该可执行文件,给它你所调用的脚本,每次你访问一个页面。这意味着每次加载页面时,PHP 都需要读取 PHP.ini 并设置其设置,它需要加载所有扩展,然后需要开始解析脚本——这需要大量重复的工作。

When you run PHP as a module, PHP literally sits inside your web server - it starts only once, loads its settings and extensions only once, and can also store information across sessions. For example, PHP accelerators rely on PHP being able to save cached data across requests, which is impossible using the CGI version.

使用 PHP 作为模块的明显优势是速度——如果您将 CGI 转换为模块,您将看到一个很大的速度提升。许多人,尤其是 Windows 用户,并没有意识到这一点,而是继续使用 php.exe CGI SAPI,这是一个遗憾——该模块的速度通常快3到5倍。

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

Just to add on these answers is that, mod_php is the oldest and slowest method available in HTTPD server to use PHP. It is not recommended, unless you are running old versions of Apache HTTPD and PHP. PHP-FPM and proxy_cgi are the preferred methods.

mod_php is a PHP interpreter.

在 docs 中,mod _ php 的一个重要特性是,

Mod _ php 不是线程安全的,它强迫您使用 prefork mpm (多进程,无线程) ,这是可能的最慢配置