  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。, d& [4 ^3 l& s$ g' M
( B* x& n! n6 {
一、安装PHP4
: C9 U+ U7 u- q8 Q& k) d我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip( R w/ x0 W2 e- U8 z: X, D
1.下载后,解压到c:\php目录下。
: g8 f4 Q4 f, L" [) b! i2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。( j9 S3 r) u/ n! M1 ~
3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。
; {2 d0 Q, w; O" U4 Q3.1找到register_globals = Off 改为register_globals = On
5 |6 u) L- `2 j1 W" N; |这一步是为了使部分旧的PHP程序能正常运行;- w) ]1 z1 Y& @, v; _9 J; I
3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions
0 x: [0 N! n- \/ q8 k以下内容新手请略过
4 S( Z& X* T3 L2 a& @" y0 n===============新手略过开开始================
: Z% K) a& k3 J* W0 ]刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions)
2 Y& r. M6 R0 \;extension=php_bz2.dll7 z% t$ q* a$ r3 j
;extension=php_cpdf.dll
" j% y0 K5 C: \# x+ p0 z1 y4 r;extension=php_crack.dll
\& E: o7 ^ C3 q& ?( d;extension=php_curl.dll
" y* |# z( _' W* ]5 l) ^$ r0 Q.....
+ b* v2 \6 ]! Z要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
2 K4 i* |" H' D* _" f其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;8 ~! A: x: ?: P; s6 X% M" a* b
如下面
' P# C) f0 t5 R+ f! jextension=php_gd.dll
1 k( v2 I" I. E7 { w) Q;extension=php_gd2.dll/ |- a2 W# p4 ^& y5 K2 s2 o5 _
按实际所须的extension=php_xxxx.dll前面的分号都去掉。
5 K6 I" u. }, u" b" n=============新手略过结束================6 u" u* U9 }7 C4 b
3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp& j" r$ M! s$ I$ W* V4 {$ T3 W
并在C盘建立一个TMP目录8 u) U8 v# ?) e2 z# d7 b
3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。
+ Y" P% \3 D; N7 p" O================================================/ D1 Q! n3 H9 [
二、安装MySql# N) B) Q- Q5 \
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
- k3 G9 r2 V# Z按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;$ b" n' a; m) G2 i/ }' a
运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) 8 D4 W" u4 f4 Y9 s) |
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口
5 g( u" w4 l; z, V1 Z/ R: e% o即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;) ^8 Z( G L, n% U
当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;8 o* Q% y, a1 x' |3 p
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;+ x2 Q7 @2 `- `* }2 H! y
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)
8 T' o* D: H4 o* F出现: 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> ! u- [$ z- r$ b1 E i- e3 l2 P
即安装MySql成功。6 E% U. u/ ~5 @2 x1 e! Y
==========================================. `) T% i7 a! b4 y- J
三、安装Apache 1.3.x 及 PHP运行设置
+ X& T/ `+ b A+ [- f1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。
I- ?" a$ n- C# P$ R如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
; P! R6 B9 B- K7 L5 v有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
( p" N+ ]0 z( {0 `值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。
: Y: H! q4 J/ u) w1 E, U9 }尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。
. i% l$ R, l8 R$ W如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装:
6 s% P: e( u( R7 o% _- q& u0 ^+ ?& N) V& Y( \& u8 z2 G
ScriptAlias /php/ "c:/php/"
/ X7 ]# p0 I( }6 a5 Z. mAddType application/x-httpd-php .php .phtml
. }& U' K$ J9 _2 t& p" XAction application/x-httpd-php "/php/php.exe"
+ X& i, }; H" f" U* o$ e注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。
8 ^( n; `' C; c$ w/ O7 H% d4 d+ y: l
警告 # u' p+ T! n9 X1 Y
在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。
( _: J# p6 g; q" `, C Y) F( t# ^
如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行:
+ J$ z2 X6 D& O5 e3 Z
/ r* ]3 K2 I; u" C. m用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,- {& v) S" V0 ]/ P
对 PHP 4:. v* f5 `# n; E# p. t" t
LoadModule php4_module c:/php/sapi/php4apache.dll
( p/ T& ~ a% y6 J$ c对 PHP 5:
, D, c: x' S3 k0 d& v3 s! C) LLoadModule php5_module "c:/php/sapi/php5apache.dll"
/ s) ], e; z% _: ?' @" I2 y/ I你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:5 G# [1 ^6 f4 d) y) j8 Z7 v% p
AddModule mod_php4.c4 k! X+ A5 a5 h* E
对于 PHP 5 则为:3 e3 X$ M% H: I4 g9 Y9 B" |
AddModule mod_php5.c
% J5 \# h& j8 j/ H搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。 ' z0 @0 T. t) Z- S) r( Q
: O( }% B2 F3 h d# i4 o6 a/ _: w, E, p修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。
* ?/ i L) a" i1 d有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。 0 H3 h, f( P) U4 q( |
如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。
5 ^" t6 c/ O; i注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。
: `, p2 d5 }" M* [( x2 a============================================& O( c$ [" s0 K
四、实现Apache虚拟主机的两种方案5 E5 a3 t8 N6 `4 e Z
简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序
# F$ F0 j; Z$ [9 Q支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 M4 q" _5 N& t2 b; r' R% W% E
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也 3 e; t( v( y5 E* M
放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机
, D* n% E" G4 ~( B设置。 * Q2 U6 Y2 O* L5 C {1 t
设置Apache虚拟主机通常有两种方案 ( M, j# p K7 A% q9 h5 I$ Z0 J
1.基于IP的虚拟主机 ) n+ \" h; E: y0 k9 d* I
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
2 s0 d1 e! b; t$ y网卡上绑定多个IP地址去服务多个虚拟主机。
& s5 J/ b9 L4 r: P6 F0 g5 c0 m, W若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先 ( S; T$ q8 R- {
你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
8 I3 M b7 U* E1 u( x/etc/rc.d/rc.local,确保每次启动后自动运行。
+ ~4 H* w4 e2 \7 \3 h5 F4 s#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \
, c3 Z) i8 B' q9 f192.168.0.255 up
6 S1 a4 ]: W9 Z7 e4 g#/sbin/route add -host 192.168.0.2 eth0:0 ( i `3 A+ D9 X9 d' w6 e
然后你需要设置/etd/httpd/conf/httpd.conf文件: & I7 r4 v4 _7 \9 F
<VirtualHost 192.168.0.2> % P$ E0 l3 S0 i6 Y' Y
ServerAdmin webmaster@yourdomain.com 9 }7 Y, I8 f1 R( s2 H( N3 W3 z
DocumentRoot /home/httpd/sales.yourdomain.com 8 l: [' d2 D$ \) S8 ^
ServerName sales.yourdomain.com & T/ y* u% H; z6 I
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log & K, A' w; p. v" I( [% C: l: S6 }
TransferLog /var/log/httpd/sales.yourdomain.com/access_log 0 u1 o Z* m4 W3 r. {3 y- d/ j
</VirtualHost>
! Y5 i7 ^8 @8 w然后分别创建目录
! U, y9 U* b1 J/home/httpd/sales.yourdomain.com,
. J' u$ L4 k, P/var/log/httpd/sales.yourdomain.com : p+ {: m9 [8 ?
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
d) d: Y/ ^) C你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
- h1 r& j0 {1 ^$ H! R2 q注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的
" I' a( n: q2 o; k. ^# n* P虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
. p% {' u9 e3 h/ \9 k4 B方案。
0 }* _% F. u/ P9 Z9 s* h& j/ f4 L& b$ F: e# x, @: c/ o W
2.基于名字的虚拟主机:
1 n+ I' H# {2 l& v 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 5 ]: T- O; u. t, b4 J' r; v
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 & V* V P* N4 ^. K* h$ u* [
/etc/httpd/conf/httpd.conf + k) _( }/ a; D2 A2 u$ r' F3 d
NameVirtualHost 192.168.0.1
4 z5 B" A6 d* ~, L/ [3 d, h<VirtualHost 192.168.0.1> : d0 W; C( r% |
ServerAdmin webmaster@yourdomain.com / F, }% L$ n) I* f. y' x/ o! ?4 d' D
DocumentRoot /home/httpd/sales.yourdomain.com
$ p! [' ?8 H6 |4 u5 e# ]ServerName sales.yourdomain.com
; k1 C! ]. _7 DErrorLog /var/log/httpd/sales.yourdomain.com/error_log
7 C* } _' y0 j8 E: sTransferLog /var/log/httpd/sales.yourdomain.com/access_log
4 j# ?( o# q) m j</VirtualHost> . o* b% t" a3 W. L* d
<VirtualHost 192.168.0.1>
2 E& _# e: ]2 Y, Q1 _ServerAdmin webmaster@yourdomain.com ' {* n$ b I' {. ?
DocumentRoot /home/httpd/hr.yourdomain.com
' e! d" f7 ?) w, I( @ServerName hr.yourdomain.com
1 L- ?- d9 }6 b, u- r* @# rErrorLog /var/log/httpd/hr.yourdomain.com/error_log
o! H# ?* Q3 T* c+ M \. x" }- ATransferLog /var/log/hr.yourdomain.com/access_log : X' Z9 L' F3 K0 S
</VirtualHost>
0 B# E; b$ G) n" I% r注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机,
, C# w3 P# ?( B" b" N3 d6 n为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS , A7 m( t& }/ R7 v- ?" `/ e' \
都指向IP地址192.168.0.1
8 \$ h; @, r6 Q) _% C4 h) L4 ?上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
1 [* I/ K- p `) ~6 y没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案, 7 m2 J6 S6 H5 {( O% H2 L
若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 4 q, [0 y4 B9 ^# c% z' R) N- j% d
提示:上面所提到的相对目录可以用绝对路径代替,如: : ]! G( F, j% _- O* X8 Q
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot
. @+ t! ?" t' M: W8 z==================END=======================; X m9 Y/ L( H" k
这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|