  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。# H. G) O7 g( f& }* d8 Y; D
- H9 T; B$ _# ~/ Z
一、安装PHP4
( g3 E( }0 z) k7 r. H' B我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip. U) g& u S) w% H: i- D
1.下载后,解压到c:\php目录下。: ~) R' U& }+ @3 h
2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
& I" _, y& B! F& a2 }- D+ }3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。. i" ^$ @- M8 W9 N
3.1找到register_globals = Off 改为register_globals = On, F6 X# j0 N. X( J
这一步是为了使部分旧的PHP程序能正常运行;6 x2 g. x" S, I* L( t2 a. c, U) y
3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions
) A5 X! e$ I1 J8 m以下内容新手请略过2 T$ I: j6 G R, o1 C
===============新手略过开开始================8 n- I/ C" L2 E1 p: o
刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) , D# w4 Q" [* H# C* Y" p5 Y5 t
;extension=php_bz2.dll4 H4 s8 m1 z$ O
;extension=php_cpdf.dll
/ E9 ~7 K8 e+ N, s- _) Z;extension=php_crack.dll
: N* l2 t) H5 G1 z;extension=php_curl.dll
: o8 v" k+ j) Z( v.....
G/ @; C) p$ |8 w- k+ m% ?要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
: P, K/ D* s6 ?, d9 S% |其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;; C' H8 ` F8 ]
如下面
! f5 j( |' d- nextension=php_gd.dll1 S$ d; c4 Q% X* a
;extension=php_gd2.dll
. a8 A& Q/ m' r& H/ D1 E按实际所须的extension=php_xxxx.dll前面的分号都去掉。1 \- l/ d: N4 E* I" ]
=============新手略过结束================
" [; y7 `' o3 a3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp
# J7 a& R- B7 S0 \并在C盘建立一个TMP目录- G: j7 `7 ^1 Y! [8 t2 r" M
3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。
" r' x* F& n) H! w' I$ G; _! e* x# r================================================
9 Q: }! B8 B( r. L7 c二、安装MySql
: y" u7 U+ _. t. f Z安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;6 j% D9 c, [- {) C, E
按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;4 S3 l! M2 x6 z; p
运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!)
1 {; m+ D) }7 n3 A; ^/ g( D& T( B从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口
/ G- u8 z( M' W2 L2 R即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;* ?9 @) Q0 [9 D- V
当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;9 p R9 n: R- H; \! h o$ B) a1 B2 T3 p
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;; l& V5 |) J9 B. c" y" o$ \5 S
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123); E: m2 s5 x/ M, _( ?+ B
出现: 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> 2 ^! q5 z+ M$ R6 u# S% B
即安装MySql成功。
- n' Z# a [7 W0 b, }==========================================
) M: B# B h6 \! c k9 j三、安装Apache 1.3.x 及 PHP运行设置; o& E1 u# b+ s: ~( l, u$ Y
1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。7 m7 U. D4 \; _/ ?
如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
7 ^2 ?5 p, U0 z3 l有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。 3 U5 r* _' Q6 I1 A$ p, L' J7 o9 H H! h
值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。
( ?) S# W4 Y; Z9 u* m+ @1 g0 C# B z尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。 3 k" b/ S8 O3 Q4 e* A- u
如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装: # W9 W5 L1 A3 U# {, ?* e& D
1 ~) M4 ^- w" T* a3 \% H/ o( n
ScriptAlias /php/ "c:/php/"
W( o+ g9 m* TAddType application/x-httpd-php .php .phtml
4 [9 w" d& s0 z2 PAction application/x-httpd-php "/php/php.exe"
7 y4 e2 r! l/ H0 P$ z: q注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。
0 P1 G8 T# _2 J. f& S( L+ y
& J" {& a G/ I6 Q9 _- F警告
3 f4 k9 P9 M, M( ?) {6 \6 N在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 . t; H6 u7 a ^3 c
3 j: I G/ |! n" B) S( B如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行: 0 X/ }3 B6 a) i& I
3 {; X& t9 c+ M7 x6 m
用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,$ @7 C6 L! ^: [7 ~( M: m
对 PHP 4:3 v0 e9 {$ t! Q4 z8 @% y/ f" w
LoadModule php4_module c:/php/sapi/php4apache.dll7 _. B. P* C6 r1 `& @$ l/ S8 N# h
对 PHP 5:
! `4 u O) V F2 p- A# Q/ n$ fLoadModule php5_module "c:/php/sapi/php5apache.dll"& i/ Q- F+ a6 x* q/ \
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:
+ U" V* P x5 U: A: q) d, h* i( Q7 dAddModule mod_php4.c' U e2 c, [! q9 ?7 e
对于 PHP 5 则为:
$ ?9 |3 y: e. o# p# s' AAddModule mod_php5.c6 g- O5 t/ S/ m
搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
5 j: a/ _/ E B3 _
" w. C0 w# b" x. S! v修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。 9 U! S8 v3 Q( N( X
有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。
# r3 ^8 _# [; r6 C如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 . u% }' s7 b2 m6 G
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。9 d! q4 W! @ }4 w- U
============================================
6 \1 W. C: f3 x* q四、实现Apache虚拟主机的两种方案) T6 P. ]9 B& \* K
简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序 5 C; p; o+ t0 l5 U, I& q
支持多个Apache服务器,如在公司财务部门有一台web服务器,名为
9 K* o: Z- E0 daccount.yourdomain.com,同时又想为sales部门建立网站,网站内容也 8 R) m. j# ~$ C# H; g6 X+ P# k
放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机 3 d5 B& d" g7 V" z! W
设置。 1 R1 L% F4 B4 V$ o4 \- W' \1 e
设置Apache虚拟主机通常有两种方案
* R% o5 K; Z) Y1.基于IP的虚拟主机 y9 b4 q. {, G9 e+ l7 U
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
8 q6 X7 R3 _6 N% Y9 _- W( w网卡上绑定多个IP地址去服务多个虚拟主机。 1 c4 w. u) g1 j- n' m3 R; \" C/ y
若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
6 \6 F2 S$ J0 I* n8 i你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到 9 H8 G. \% C) w7 B" C, l2 @
/etc/rc.d/rc.local,确保每次启动后自动运行。 6 J5 u" A9 Q- r' L2 q) M
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \ # C, b0 v3 G& G! m3 i. B4 `
192.168.0.255 up " O% G* ~ S4 p9 _1 o
#/sbin/route add -host 192.168.0.2 eth0:0
V" p* g* c$ w$ q' q. \& S然后你需要设置/etd/httpd/conf/httpd.conf文件: ( Y. _8 |% u/ V9 ~7 ~6 x1 U
<VirtualHost 192.168.0.2> , X: ^, {2 A! O0 p
ServerAdmin webmaster@yourdomain.com
+ Q6 V. G+ \7 m9 I) }DocumentRoot /home/httpd/sales.yourdomain.com
$ m7 b' Y/ v7 V$ J2 |* ]5 R) _ServerName sales.yourdomain.com
4 h/ C6 c7 Y0 |0 yErrorLog /var/log/httpd/sales.yourdomain.com/error_log 9 R+ T: `6 V9 F* A7 [2 o$ h: X
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
6 U1 m' Y7 Q8 @- C, U! S</VirtualHost>
9 c# _) s @& F0 G6 s2 ~; Y& `然后分别创建目录
& \. W# l8 H0 O% p! @/ q/home/httpd/sales.yourdomain.com, * y5 [' d- t. r7 \/ b
/var/log/httpd/sales.yourdomain.com
- `7 Q' k. A6 K. a9 F# q, L& A2 v放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
9 `" ]9 Y2 R8 N* x% @2 |你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
- @4 d* |! K9 P& Q7 ]0 @% v; s注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的 ! [' E% e: C& X- D) {7 }7 K/ x4 f9 j
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
7 N! q. z& r3 L N7 d0 F方案。
. Q; {+ n$ u# o0 W$ \! x' Y6 ~' Q
2.基于名字的虚拟主机: * v6 }6 T6 Q d. U; N
它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 ' A) v0 a- a6 g; f5 d& J! O( |
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件
) A9 \$ b/ h2 F+ Z7 c- F4 X: C/etc/httpd/conf/httpd.conf
3 B, }2 g( ?$ }6 {0 k# Y+ o6 c1 u+ bNameVirtualHost 192.168.0.1 ( ?3 d z( K/ H
<VirtualHost 192.168.0.1>
( K& s' S3 V; F4 u$ MServerAdmin webmaster@yourdomain.com
2 r# y; E: g/ R0 e+ VDocumentRoot /home/httpd/sales.yourdomain.com
) ]- a4 U6 a$ G) P) ?ServerName sales.yourdomain.com ) w7 Y3 B, d. e! c# u
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log $ P* v+ o c; { e) [" i# L/ b5 y* Y+ J
TransferLog /var/log/httpd/sales.yourdomain.com/access_log : ~) }( {' t# e* u8 q* u
</VirtualHost>
3 d8 l) n6 P, ]) C0 w$ w/ j<VirtualHost 192.168.0.1>
. _: C' J! k, n( c- MServerAdmin webmaster@yourdomain.com
/ M# x/ m0 e, o% ZDocumentRoot /home/httpd/hr.yourdomain.com
* d4 C* p6 R) n* Z# z: hServerName hr.yourdomain.com
4 I2 P y0 m( uErrorLog /var/log/httpd/hr.yourdomain.com/error_log ; g+ \9 M M/ q& c
TransferLog /var/log/hr.yourdomain.com/access_log ! y1 a# G4 c1 K l6 j/ H
</VirtualHost> : v! X0 }" {; r! x! z
注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机, ( E& J: x& a( F" u* i# Z
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS $ E3 B0 \6 ]2 ]& }
都指向IP地址192.168.0.1 0 g' o. s0 N. [5 R
上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
! [& ~6 u5 e6 o6 Y0 I0 u- o没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案, + A- |0 g9 d* I4 x: `
若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 3 D- o# N. z! Z' O) Z
提示:上面所提到的相对目录可以用绝对路径代替,如: ; k! H9 J6 [% ~, \9 b: D$ V
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot$ b, j# i5 o; H# |3 i, v
==================END=======================
( W. H! ^# H/ v这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|