Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。/ T) l7 S/ F% x( t9 y N
( _! p6 P" x9 V/ B# p. F7 Z一、安装PHP4+ G+ @" P& D8 E+ g
我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip- N; v8 q5 r, t5 r
1.下载后,解压到c:\php目录下。
1 K( Y. K$ w# v2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。% d0 y7 u: r7 _- A0 U4 z9 o0 Q' g5 t
3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。
/ S0 E3 j3 H) C) c0 `6 d+ ^3.1找到register_globals = Off 改为register_globals = On
( D, R6 n, x- R9 e/ d这一步是为了使部分旧的PHP程序能正常运行;
( K# X' J9 S7 @9 s- D! F7 P3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions2 c5 m$ w) x$ t' @
以下内容新手请略过' N* S9 }- k; Q h8 l- B6 a4 h
===============新手略过开开始================; @9 r$ H" P7 L, D. N ?" ~
刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) ! u! v* J4 |. T
;extension=php_bz2.dll6 B. \% l; |; w% a \
;extension=php_cpdf.dll: u! z2 D' u$ U' F( S% J
;extension=php_crack.dll
% f/ ~* O$ j5 e. ?2 j;extension=php_curl.dll
4 V. j U% s5 E..... % ^, f5 P! m3 h6 B7 t0 ?
要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
0 D& Z' J0 t1 i7 _# a) r3 Z$ `; X其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;; N/ i6 Y0 w$ v5 G$ a5 \/ d: A
如下面
9 n& `- i. S h5 c5 s* _+ ^% O) xextension=php_gd.dll# I3 D) }) k& B/ s/ G0 A3 q
;extension=php_gd2.dll5 M; h* R8 D8 P
按实际所须的extension=php_xxxx.dll前面的分号都去掉。4 v# ~" [# Q, F
=============新手略过结束================3 J0 q$ l" Y1 G/ j
3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp
+ s/ D! \4 B4 m+ W( _3 E7 |并在C盘建立一个TMP目录4 ~8 x5 e. {( x% T: }3 V9 u2 g
3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。
9 `2 |& @ T0 h8 |7 C$ H================================================
* h& R/ {. u/ o& ?" A' ~% Z二、安装MySql" G( r7 U7 I% X
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
5 j( k5 g$ A1 ^按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;
: W* ^$ m I. k# @% C) w' J R运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!)
! _$ v [- x+ k3 r0 x$ r从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口
7 T: A8 ^' Y R; s# a$ E即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;* W' V6 @/ F B; f
当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;% _" H0 v0 I. X1 m3 d; i
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;: T' r" E" n- K! W
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)2 y5 O! Q9 j. p; J6 L! T( ~
出现: C:\MySql\bin>MySql -uroot -p Enter password: ********** Welcome to the MySql monitor. Commands end with ; or \g. Your MySQL connection id is 4 to server version: 3.27.44-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> . g& i& r' [) A6 n" V/ \# ?
即安装MySql成功。
% }' V' _1 w( Z0 [- ~==========================================
# E# A6 e' ]- L) }: Y/ B三、安装Apache 1.3.x 及 PHP运行设置
; r+ c( @) K* [. c+ a* b/ j1 ~1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。$ L. ~, D% R: v8 v* ?- {
如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。 : q1 W M# S8 a# u1 h" Y7 g
有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
& q4 H: D4 K6 b% I值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。 2 X! U# M3 _0 k* J1 Q# b! p
尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。 2 E8 ?) P- m3 {
如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装:
; c/ w1 @1 N T; s0 T& r& \6 u- G1 y$ B& e2 I8 R( g+ g
ScriptAlias /php/ "c:/php/" 6 q% w* _5 ?$ x- F- p" W
AddType application/x-httpd-php .php .phtml
) d+ z6 |7 H9 N4 l4 |Action application/x-httpd-php "/php/php.exe"
- Q' e6 e* y I% H. F& Q注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。
+ y" ~5 J- l: P( Z' M( Y5 p! A% @* M. v
警告
0 J0 l. b0 p" U$ y! b4 t在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。
, i$ W8 T/ c: ^* Y' s& ^0 N K
/ X- ^5 h6 t' E' [如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行: ( A" r/ x8 _7 p1 f* x
: }- v( t& h5 D用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,2 u8 [% Z- l4 U
对 PHP 4:
/ x3 [4 O+ A: W( C5 c0 }LoadModule php4_module c:/php/sapi/php4apache.dll+ r+ j7 s9 H4 Z* o/ E+ A. Y+ M* F
对 PHP 5:& c6 Q# j* v4 c- M$ z
LoadModule php5_module "c:/php/sapi/php5apache.dll"- c; M; l! b( B- t+ p
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:
/ E1 l( ]8 `5 `0 A) iAddModule mod_php4.c
{9 z+ F/ E! C- \- D: a1 Z5 o对于 PHP 5 则为:: ?* l* b3 ] v# L6 F- A5 ^
AddModule mod_php5.c
, f' W- m" c' |, z# N" p+ x搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
4 |' z( x: M C6 X; u1 K5 v8 N2 T0 G3 n. p! ]. c+ C* E% M
修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。 ' `) ]9 C/ L; {+ \! U9 _% E9 y* X* f
有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。 7 C8 x% f; i0 |. J0 s' @5 G
如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 2 G* |+ e, y. g, e6 F$ F. O2 f
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。
* X$ Q1 K' X- n u+ l2 m3 H============================================$ ]. H% |- G6 y( B+ x: e
四、实现Apache虚拟主机的两种方案
) y! l9 p( ]+ j- M& M2 m4 z5 Q简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序 : u3 z% C3 Z8 ?3 Z# v
支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 6 G% x0 E6 h6 g! E
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也 2 n& i' P% F A' V; ?. n
放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机 # ]# q* }& N4 V3 \! l g
设置。 ( V7 D6 L6 b0 p1 A' U. z& C: l( e
设置Apache虚拟主机通常有两种方案 , @5 ]1 a. e, M; _# R
1.基于IP的虚拟主机 ) ~; G; Y0 S( E; ~2 Z/ w; ]4 G
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的 ! N4 r, Z- b- A
网卡上绑定多个IP地址去服务多个虚拟主机。 , v( R7 X) J3 v$ T8 ^- k
若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
' e4 V& |: H. j3 Q, d你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
% v0 e4 l+ M N/ K6 z |) g+ t: l6 k/etc/rc.d/rc.local,确保每次启动后自动运行。 ' |1 t& W. z+ W) z7 }0 m- S
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \
* u5 e, h' Y6 U7 X! T9 }/ ^9 v" |192.168.0.255 up
$ v5 o: S( e. T$ a3 s#/sbin/route add -host 192.168.0.2 eth0:0
, w( X3 v+ w& d8 b然后你需要设置/etd/httpd/conf/httpd.conf文件:
' K- m% ^: w4 a. \% V! Q$ D J* q. N<VirtualHost 192.168.0.2>
% P* ^7 N0 y; Y& vServerAdmin webmaster@yourdomain.com 7 L! u) ?# P6 r0 V* R
DocumentRoot /home/httpd/sales.yourdomain.com 5 u9 f1 ~7 f( j; p
ServerName sales.yourdomain.com 6 A) Y$ X4 @; P. Y1 z
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log 2 o, |6 m4 j( l4 R$ v( U
TransferLog /var/log/httpd/sales.yourdomain.com/access_log : R" Q. Q6 M, K$ a; ^/ l) X
</VirtualHost> 6 u. N9 |$ }! ]7 J% q, G, V7 q
然后分别创建目录 1 Z) K Z6 ^4 Z% l( {
/home/httpd/sales.yourdomain.com,
( {6 I; k# D7 m# o4 R4 g/var/log/httpd/sales.yourdomain.com 8 A* V0 m7 ~2 U8 s9 M& Y
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
3 r* T4 f( o" a$ L4 n2 R& _你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。 7 `, m; b6 R! O7 y
注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的
+ R3 ]) [4 S- b( c% N8 A虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
# \5 n. b& R* W0 h& c& I9 z& k3 U方案。
9 e0 k) O: l0 m7 k. V
$ k2 n6 U! n0 i, a2.基于名字的虚拟主机: 0 {; X% U; _8 C/ L6 F3 Q
它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的
' s( h- G, C, b3 t* b: i7 A浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 6 R$ U; A6 ?0 Z6 s/ H" A& w6 c
/etc/httpd/conf/httpd.conf # `5 m" R5 l+ g6 ]+ z0 l4 }
NameVirtualHost 192.168.0.1 ( G* u+ L2 {4 r1 P
<VirtualHost 192.168.0.1>
4 D. m, J5 \ D! UServerAdmin webmaster@yourdomain.com ' Q( B7 t" s) z8 ?6 _+ e
DocumentRoot /home/httpd/sales.yourdomain.com ! b" u6 Y0 F0 |: c& ?' i; u
ServerName sales.yourdomain.com
; N- ?3 ~1 V: ?5 t! `ErrorLog /var/log/httpd/sales.yourdomain.com/error_log 2 z+ J% K" L9 t2 l( D" Q5 o
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
6 x, R ^2 J7 X- l) q0 w</VirtualHost> . o4 h& S: {6 s/ _, b8 x
<VirtualHost 192.168.0.1>
% B/ f, q P7 p- Z: }8 VServerAdmin webmaster@yourdomain.com / s6 E& ?8 g: g, w: U0 J- ^% w
DocumentRoot /home/httpd/hr.yourdomain.com
* U7 g |' B9 g8 IServerName hr.yourdomain.com
! v: h1 H9 ~6 ~0 u T! R/ QErrorLog /var/log/httpd/hr.yourdomain.com/error_log
. k" Q# A9 _; Y' W4 V& @" H: pTransferLog /var/log/hr.yourdomain.com/access_log ' P" z6 e% ^0 q8 p7 Y6 U
</VirtualHost>
9 C; G7 P" m# R: Q& o& G注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机,
/ R2 j7 t$ J" S; j' B为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS 4 t/ m+ }' h6 B, ^# k. N; ]. R
都指向IP地址192.168.0.1
; r7 J2 R6 T: q0 b上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能 , G- [. E% h6 `* I4 {5 T( d
没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
( u( K4 T, |0 [9 \. O: ^, z4 S若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。
) [9 L: O% J: W/ d0 u, |提示:上面所提到的相对目录可以用绝对路径代替,如: % A7 F! A9 r- t% ~4 ]
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot! c2 ~# T! `2 J& ^( k+ c
==================END=======================& f F- @) t4 l, m& e
这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践...