  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。1 c$ |* @% ?$ V/ L/ G5 F
* Z/ q2 H! C( S
一、安装PHP4: O- E B h. ?# A$ v7 c
我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip
3 R# q% M# E5 x- U/ M4 f% D8 N1.下载后,解压到c:\php目录下。
' |1 u6 z3 X! r% X& F# _0 n2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
. w& S0 t( l% i3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。
5 d# ? I' {4 W8 L3.1找到register_globals = Off 改为register_globals = On
0 r/ K4 w, {+ Y% C+ F/ X$ u6 h$ g这一步是为了使部分旧的PHP程序能正常运行;7 @* S% [7 ?$ D( D% b# A4 N
3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions' k- U( ~5 X$ t% ^
以下内容新手请略过2 M! L& g( d/ }3 g0 U" x2 O
===============新手略过开开始================9 j9 T6 C J! f8 Y, M4 e( D
刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions)
, E+ G4 K% U7 |% Z: [6 c;extension=php_bz2.dll
, z8 Y. s5 I9 B;extension=php_cpdf.dll" {* O' [& c. ~# t& Z
;extension=php_crack.dll
' W6 N, `; |( l;extension=php_curl.dll. F. r+ x4 O0 K& K' v7 Q
.....
2 E Q% W$ E" L要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
1 H% F. u4 A/ ~其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;
$ m8 B& o U M: v) A, o如下面* _& _2 U7 E' ]( f$ d: ?
extension=php_gd.dll
- H1 b9 W1 P9 C3 t( n8 X% m;extension=php_gd2.dll
6 }9 {' u1 [$ S) E, F1 h按实际所须的extension=php_xxxx.dll前面的分号都去掉。' d0 Z7 M, k! F8 {; M
=============新手略过结束================
8 [4 A& T6 g, x" l/ P8 @/ N3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp
% ], Y+ |, A# b. b' B& l5 E- \% a并在C盘建立一个TMP目录
; R( _% m3 \+ P2 U3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。( i/ n: y7 X. Z8 x) B3 n& t; y: V) t
================================================' f4 V0 t l ~7 H. M
二、安装MySql$ q0 ?* n1 a1 Y' J
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
+ H4 [6 E6 E+ h8 |3 g按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录; q+ G( Q0 w/ W7 S. N
运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!)
# F, K5 h1 [( _" d从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口' L5 A9 K/ ~$ n* Z8 S3 O, x
即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;
+ j) G6 M. ~( G# X) q. C当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;- T1 E* H# N, q ]9 S0 ^
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;, [& V4 ?. \5 S. k, m- }/ U
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)3 p7 X/ Y2 }' o% e+ H, r
出现: 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>
& D* m) Z# q# _- r4 f3 F2 C+ p即安装MySql成功。8 C* r" D5 v6 @1 ~: x& U. B g
==========================================0 g0 _; R9 s0 B+ e! b) C1 c
三、安装Apache 1.3.x 及 PHP运行设置6 P: c2 E" p* j
1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。
. ~5 _# e4 e4 R如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
3 V6 i3 f0 E. e有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
, S8 n( A+ ?4 E3 {# C) s3 v3 w值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。 4 X" g1 ~/ b* b; Z. ]9 K, O
尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。 ( |) n# Z* }% X- R/ x
如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装: . I! u( l) V" u9 Q4 |! M$ m
" Q/ Q- ]* G- n* v
ScriptAlias /php/ "c:/php/"
: @: y& }) K! e4 S2 H2 BAddType application/x-httpd-php .php .phtml
3 F- N. t, _3 A9 L( ~Action application/x-httpd-php "/php/php.exe" % S* l7 h. i4 h
注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。 0 k2 j4 c8 Z5 ?3 r y
3 c$ G. ~6 A4 d8 S' `' V警告 3 R; D7 Q7 S2 D' O! w( Z1 ^* C
在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 " w+ I6 {. c5 j* b* M- d
; Y8 o1 H# P- W* j) l* W如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行: + d( I- v0 I, I
6 |# k0 H5 J' A4 m6 G. I' v0 s; O
用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,. M2 }. I' F' `4 a8 j8 }; L: \8 J
对 PHP 4:
2 Z' j( h0 U4 dLoadModule php4_module c:/php/sapi/php4apache.dll
" S; L5 W9 }* K! ^8 C( f* Q对 PHP 5:
& a' \; _1 q( h; c2 v3 p/ O6 \LoadModule php5_module "c:/php/sapi/php5apache.dll"
* V% I, |2 ^. n9 U: F. A你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:' Y- c2 O7 ?4 `- D0 B
AddModule mod_php4.c
9 A, [$ V9 x c. U3 v1 O& j对于 PHP 5 则为:
: R: F3 m) N* r; aAddModule mod_php5.c
. e: l6 O6 \' n% |# b9 N9 x5 A搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
* ]0 h1 I" T R' x- U1 I6 `6 ~2 Z; h
/ A# Y9 K, V3 s2 a. ]+ `, p) _+ I修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。
" j0 n! [0 R9 c* l有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。
2 G8 j9 l$ n+ Z+ t1 n如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。
3 a2 V* I# p: }/ M" `注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。 v4 [1 W2 \: F# A+ Q2 N! z' t" C% r& ~" n, o
============================================0 y' j$ ^, Z" \. T% w
四、实现Apache虚拟主机的两种方案
1 c7 v) `' ?3 K0 u简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序 0 |* D& i( u5 n9 W. d' j
支持多个Apache服务器,如在公司财务部门有一台web服务器,名为
3 F5 q/ F2 v( N) baccount.yourdomain.com,同时又想为sales部门建立网站,网站内容也
1 p0 l. G! r8 d* {放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机
7 I' r9 d$ e: r7 S设置。 ! n+ e# i. K# y. h F9 v
设置Apache虚拟主机通常有两种方案
/ c; h; D: m2 t& ]1.基于IP的虚拟主机 ' m2 P; X H' I: u/ }/ A5 y
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的 ; s7 v# b) o8 l7 A, N
网卡上绑定多个IP地址去服务多个虚拟主机。 0 a+ ? w+ W% m7 w, F) c
若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先 6 S! R+ n9 Q7 d8 A. }" r) J- m. V; M
你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到 ' D3 W5 r5 C1 y2 c( G% N6 o
/etc/rc.d/rc.local,确保每次启动后自动运行。 5 Q' B, r- r x9 h* T- m: A3 d
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \
) q9 Q" z8 |& l4 e4 C192.168.0.255 up
1 o$ n1 V9 [2 l) f8 U* k) q#/sbin/route add -host 192.168.0.2 eth0:0 $ t$ o( d7 Q6 [
然后你需要设置/etd/httpd/conf/httpd.conf文件: * P1 ^7 [3 e( {4 |
<VirtualHost 192.168.0.2>
7 P* w" K% r0 J6 ^ServerAdmin webmaster@yourdomain.com
% i v+ E( p; m6 j4 rDocumentRoot /home/httpd/sales.yourdomain.com
3 ~/ o# V( T. Z9 nServerName sales.yourdomain.com * J" ^5 d; x! N+ F8 L2 c; ^! y
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log ; h- v1 E5 S, x, m7 N/ L/ z
TransferLog /var/log/httpd/sales.yourdomain.com/access_log * R- ^* q% C, R! I
</VirtualHost>
4 L6 q5 v6 t3 _8 A$ V: c3 b( _然后分别创建目录
& S0 M% W# R5 e( |4 c/home/httpd/sales.yourdomain.com, ( X* A' M- {+ h |* p8 I p. s4 P
/var/log/httpd/sales.yourdomain.com
8 t+ W5 c! p) `放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保 ) j/ A3 b& g/ I: b" l' N6 T9 b
你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
0 T6 F/ ^# K( x4 K注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的
+ W6 @9 J6 v2 l* t虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机 3 g" u! f% X5 W! N
方案。
& U! P( K4 W' N7 ^2 d4 H8 Z) }0 z0 \( H( m9 h+ u, F3 c6 k# }
2.基于名字的虚拟主机:
% x( }1 S# t+ n: r9 e6 V 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 + Y- S; Y: w" V f% |$ R( d
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 " _/ Y- f0 K4 t. X5 B- p! h5 d
/etc/httpd/conf/httpd.conf # d' t- |! K$ {
NameVirtualHost 192.168.0.1
( i7 e! A. }: f3 |<VirtualHost 192.168.0.1>
' t: m U1 J% L- |1 B3 |' k6 C. g. l NServerAdmin webmaster@yourdomain.com
+ A. t6 ]! W: e! UDocumentRoot /home/httpd/sales.yourdomain.com
" i4 A) h3 q4 D8 }1 u% vServerName sales.yourdomain.com 6 y/ U' n' j. _
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log : b( k# f1 _0 k# f4 |. j
TransferLog /var/log/httpd/sales.yourdomain.com/access_log , v _" ~ G/ M' k$ B2 z3 B H8 p
</VirtualHost>
% E' D$ ?1 I6 T9 I7 b) b8 w4 R! [<VirtualHost 192.168.0.1>
! o$ \0 W i2 ~- ~ServerAdmin webmaster@yourdomain.com ) X& z- B6 C" m% y8 C) q
DocumentRoot /home/httpd/hr.yourdomain.com ( |9 O J" e$ H1 p- X+ V
ServerName hr.yourdomain.com - R# E L# D& p8 _( l0 p% U9 r, n- l# D
ErrorLog /var/log/httpd/hr.yourdomain.com/error_log
, T7 T3 ^8 e r# YTransferLog /var/log/hr.yourdomain.com/access_log ) ]8 \0 [; n1 m# S7 T: ?
</VirtualHost>
: j5 N# |7 w3 j4 r1 `9 ^/ U注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机, 5 b0 S+ E% q3 [( Y
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS " S# B3 ?5 ^, U F; d$ E) }0 P3 m
都指向IP地址192.168.0.1
% [' ]+ L# a% ^& j上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
1 J# O8 a. ^6 r1 E没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
5 c) W+ H3 i0 h; D若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。
6 @/ @, O {/ g& Q提示:上面所提到的相对目录可以用绝对路径代替,如:
& ? n+ @0 v4 B1 j1 h# ?/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot
: I) o* I2 V& F' P9 J+ r==================END=======================
8 ^* x) `3 T- X. U这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|