Microsoft Windows 下的 Apache 1.3.x

本节包括在 Microsoft Windows 平台的 Apache 下安装 PHP 的说明和提示。在另外的页面也有 Apache 2 的安装和说明

Note:

请先阅读手动安装步骤

有两种方式让 PHP 工作在 Windows 下的 Apache 1.3.x 中。首先是使用 CGI 可执行程序(PHP 4 下为 php.exe,PHP 5 下为 php-cgi.exe),另外一种方式是使用 Apache 模块 DLL。无论是那种方式,都需要修改 httpd.conf 来配置 Apache,使 PHP 能够在其上运行,然后都需要重启服务。

值得注意的是,现在 Windows 下的 SAPI 模块已经稳定得多,我们建议首先考虑使用 SAPI 而不要使用 CGI 可执行程序。因为 SAPI 更加透明和安全。

虽然还有些其它的方法来在 Apache 下配置 PHP,下面介绍的方法是最简单并适用于新手的。请参考 Apache 的文档以获得更多的配置参数。

在修改完配置文件后,请记得重启 Apache 服务。例如,如果把 Apache 作为 Windows 的一个服务来运行,那么在命令提示行下使用 NET STOP APACHE命令然后再使用 NET START APACHE命令便可重启服务。也可以使用重启 Apache 服务的快捷方式来重启。

Note: 记住当在 Windows 环境下的 Apache 配置文件中添加路径值时,所有的反斜线,如 c:\directory\file.ext,应转换为正斜线: c:/directory/file.ext。对目录来说,也必须由斜线结尾。

作为 Apache 的模块安装

应该将下面几行加入 Apache 的 httpd.conf 文件:

Example #1 PHP 作为 Apache 1.3.x 的一个模块

这里假设 PHP 安装在 c:\php。如果不是这样请根据情况修改路径。

对于 PHP 4:

# 在 LoadModule 一节的末尾添加
# 不要忘记将该文件从 sapi 复制出来
LoadModule php4_module "C:/php/php4apache.dll"

# 在 AddModule 一节的末尾添加
AddModule mod_php4.c

对于 PHP 5:

# 在 LoadModule 一节的末尾添加
LoadModule php5_module "C:/php/php5apache.dll"

# 在 AddModule 一节的末尾添加
AddModule mod_php5.c

两个 PHP 版本都需要添加的内容:

# 将下面这行添加到 <IfModule mod_mime.c> 条件块中
AddType application/x-httpd-php .php

# 如果要使用语法高亮的 .phps 文件,需要添加
AddType application/x-httpd-php-source .phps

作为 CGI 可执行文件的安装

如果按照手工安装步骤将 PHP 解压到 C:\php\,需要在 Apache 的配置文件中添加如下内容以使 PHP 按照 CGI 方式运行:

Example #2 PHP 以 CGI 方式运行在 Apache 1.3.x

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php

# 对于 PHP 4
Action application/x-httpd-php "/php/php.exe"

# 对于 PHP 5
Action application/x-httpd-php "/php/php-cgi.exe"

# 指定 php.ini 所在目录
SetEnv PHPRC C:/php
请注意第二行的配置可以在默认的 httpd.conf 中找到,但是是被注释掉的。也请记得将 c:/php/替换为 PHP 所在的真实路径。

Warning

服务器使用 CGI 方式进行部署可能存在几个公开的缺陷。请阅读 CGI 安全一章 以学习 如何抵御这些攻击。

如果想发布语法高亮的 php 文件,没有类似于模块方式下 PHP 那种方便的方法。如果选择了 CGI 方式运行 PHP,需要使用 highlight_file() 函数来进行语法高亮。创建一个 PHP 文件,加入下述代码即可:<?php highlight_file('some_php_script.php'); ?>

add a note add a note

User Contributed Notes 7 notes

up
3
david
7 years ago
Note that if you place php in the c:\php5 director your ScriptAlias line should read

ScriptAlias /php/ "c:/php5/"

This may be obvious to regular Apache users, but I changed all sorts of things around before realizing this was the issue. I thought

Action application/x-httpd-php "/php/php-cgi.exe"

was a path and was changing it to "/php5/php-cgi.exe" which didn't work.
up
3
j dot b at inmail dot sk
8 years ago
DO NOT FORGET to add "index.php" into
<IfModule mod_dir.c>
    DirectoryIndex index.html
</IfModule>

so you get index.php processed;multiple values separate by space:
<IfModule mod_dir.c>
    DirectoryIndex index.html index.php
</IfModule>
up
2
BCarr
8 years ago
To Besta and 'j dot b..dot sk':

'Add Module mod_php4.c' or 'AddModule mod_php5.c'  may or may not be necessary depending on your environment and version of Apache.

In my situation, this add module DID NOT work or it wasn't necessary.  The LoadModule was enough to do the trick.  I tried it with PHP4 on Apache 1.3.34 and Apache 2.0.

All in all, your notes have been helpful.  Thanks.
up
2
Besta
8 years ago
Do not add this line to apache http.conf. It does not work.
AddModule mod_php5.c

Also, remember to edit the system variables, edit the PATH and add the path to the php directory and restart windows.
up
2
psychosos at gmx dot at
9 years ago
Please note that the SetEnv PHPRC "directory/to/phpini/" only works when using PHP as CGI, but _not_ when you use the PHP Apache Module!
up
0
frank at circuitdata dot dk
5 years ago
Entries to httpd.conf for PHP 5:

  AddType application/x-httpd-php .php

  AddType application/x-httpd-php-source .phps

must appear BEFORE

  LoadModule php5_module "C:/php/php5apache.dll"

This should NOT be added:

  AddModule mod_php5.c

It makes no sense since AddModule means activation of a module compiled staticly into the Apache. We ofcourse do not have that!
up
-1
Anonymous
8 years ago
On contrary to user "Besta"'s post

AddModule mod_php5.c

should be added to the addmodule section. I installed php5 and apache 1.3.3 and without the above line it is not recognizing the .php files
To Top