  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。
, C* x! a' H4 n7 U) t! L9 {3 B! V- s6 j
一、安装PHP45 w R- Y4 D6 q
我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip
& K* k" G8 j' ?, f1.下载后,解压到c:\php目录下。
2 u; b4 ]/ }/ a" w2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。: }# ^2 ]6 e9 z$ A* Z& ]/ B$ |
3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。) q: L1 h) k- t6 W T4 [5 l
3.1找到register_globals = Off 改为register_globals = On
9 w+ R& F1 R x2 S+ w: v这一步是为了使部分旧的PHP程序能正常运行;
# Z7 C" [* b; G, K$ I0 J: ]3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions
Y6 w9 k2 s, j以下内容新手请略过
- o- [; [$ _& w===============新手略过开开始================
1 m6 ]/ Z9 Q8 b刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) 6 S- k) {6 D2 e
;extension=php_bz2.dll" {! S8 c3 [ y% R3 J5 J5 j
;extension=php_cpdf.dll6 U1 q/ F+ @$ _' z+ d5 ?" g
;extension=php_crack.dll y7 D6 X; S8 l4 v) P8 n
;extension=php_curl.dll9 p) L" H( l9 B7 {5 n
..... 8 n/ L0 r9 u3 q3 r9 R4 O$ X- u
要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
% b$ k+ h( x( W l3 O+ {其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;
" H7 Z. G, X+ t% k8 P+ `+ v1 U# \5 a& _( F如下面; h- y3 ^6 [1 F8 v3 _7 P
extension=php_gd.dll
8 ^% K& M0 E* r7 u4 u;extension=php_gd2.dll
! k9 Y0 I# ?" [1 N) q按实际所须的extension=php_xxxx.dll前面的分号都去掉。6 b! v" ], I" W! z4 J& u* F
=============新手略过结束================
6 @' j# P+ u! j$ C7 F; n# E" p3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp7 r C( J( k2 u: r. R, z3 n
并在C盘建立一个TMP目录1 o) S0 A3 I) G6 e' [: } w. V
3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。& v4 j' P A9 b' C* `/ a ~
================================================
9 l/ p' ^' k, t: _6 |二、安装MySql$ O' U2 N6 Y$ O! y+ F8 o
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;+ Z! d& B" _5 C2 B3 u: u* v, J) Q4 T
按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;
. z& R( H, u4 v6 x/ M4 c运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) # A0 `/ A9 L) k
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口9 {0 X0 v* J1 S: ?3 V6 Y
即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;
% N& g; `2 V4 @ X" A8 J. y1 k当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;
& f) [1 K" K- {- M5 C/ Q l3 R测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;7 ]; m5 _% o, N
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)
9 G. Q9 W( x! V8 ]/ j出现: 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>
$ X' `- m. I0 D0 n5 q即安装MySql成功。+ q3 `+ K$ A8 [$ W* N8 W# }4 f& u
==========================================9 X0 s' F0 i, Y* S% V
三、安装Apache 1.3.x 及 PHP运行设置+ x1 [ j7 p; A8 ^" i& }9 h
1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。
6 w9 o! b/ m+ x p- X如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
( v/ y4 O1 T% H% e ]4 D有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
. R6 v3 j5 G* Y2 c" L% h& h值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。
: i4 w, V* e6 h尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。
( k1 p T p. g2 m2 J: I如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装: ) J3 N( R+ K" {
( o [1 p& l/ \* O1 W7 I- a5 r
ScriptAlias /php/ "c:/php/" . W0 o" {8 K, q! o- U1 I
AddType application/x-httpd-php .php .phtml
7 S/ [8 m4 @1 |$ u6 x& NAction application/x-httpd-php "/php/php.exe" & p$ l& S) y* [3 B6 _$ I
注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。
3 }+ n; x. W! W# h. l/ E1 ^
7 X. m; a8 J: b警告 9 ?$ ]" M( } d: s: h, x A2 M# Q
在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 ' z3 d9 V; Z, s% p0 Y* j
7 Z4 q T! }% M! Y- P# `如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行: ' _2 i% a% Y, K8 w; I8 W0 T# V
$ ]# ?1 i6 }5 i$ v用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,
0 P6 Z; S2 Y U. z1 T S# v对 PHP 4:8 S! j: A3 b" _- v
LoadModule php4_module c:/php/sapi/php4apache.dll, _- b- X* N6 w) ] z" K
对 PHP 5:) D# L' B/ j* a$ R# [
LoadModule php5_module "c:/php/sapi/php5apache.dll": w' c& D! C" o! }) T0 X; U
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:6 O- p7 u/ j1 Y( a# O! j: k
AddModule mod_php4.c
0 W# n. Q5 @) X" l* p. b- Z对于 PHP 5 则为:
$ M+ H7 N) u8 d a0 SAddModule mod_php5.c* i! w7 ]0 R! u' @
搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
8 K8 @7 T/ x7 g( h- \5 X) E3 @
( ^; [ J2 A/ P* b) h修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。 |3 R4 T" k' J4 L
有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。
, H4 y1 o- L) P如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 8 C2 ?+ B0 {' U& ?
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。
. Q/ E; X, |# Y6 W============================================8 R2 {3 _1 {# w" E
四、实现Apache虚拟主机的两种方案
) {4 O# _0 d7 s3 l简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序 4 ]' ~3 f/ j0 e# b# I% Q0 l
支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 * s& G' A! Y) ~ x
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也
% B( G8 |& b! g+ `9 f) x放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机
; `9 r$ _- Q. k+ J% T; i: Y/ p设置。
1 I* D# `2 T$ Z1 U6 h4 d设置Apache虚拟主机通常有两种方案 5 g1 ^; G1 _- _7 n& G3 t* [* Z$ R
1.基于IP的虚拟主机
) @6 X# X5 M/ k4 F; o 这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
; U: l1 R k4 K) o$ ] X网卡上绑定多个IP地址去服务多个虚拟主机。 ( O4 ]+ t+ K" K
若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先 0 b! A3 Z1 D8 J/ [4 E7 |6 d
你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
' `) @) D4 m& X( u+ u+ a- q/etc/rc.d/rc.local,确保每次启动后自动运行。 3 f$ V( m* h5 d+ h" a
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \
5 ~8 Z" x4 X* s0 P& f1 N2 ^192.168.0.255 up
7 _" C7 G d6 u$ L6 _2 |0 G5 Q#/sbin/route add -host 192.168.0.2 eth0:0 c$ g5 P) R1 c. h% B- N' w& T
然后你需要设置/etd/httpd/conf/httpd.conf文件: 1 H& F# I5 r' q6 X4 R0 M0 O
<VirtualHost 192.168.0.2> $ U* ]3 q4 E/ j+ K. [+ D
ServerAdmin webmaster@yourdomain.com % F5 }2 K: i0 ~5 e
DocumentRoot /home/httpd/sales.yourdomain.com , T' d" T5 S+ U7 k
ServerName sales.yourdomain.com - F/ ^: R& r: O+ C% m
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
- q4 ?; ]8 a5 D& l( V8 iTransferLog /var/log/httpd/sales.yourdomain.com/access_log " g. o8 [ h3 N( n K3 H
</VirtualHost>
) m; a4 i5 ]) c ^然后分别创建目录
# F% O! {9 t1 ^ K* L1 `/ }6 S/home/httpd/sales.yourdomain.com,
3 l) }9 @6 H5 H) @/var/log/httpd/sales.yourdomain.com
4 |! f' F" V5 o4 D放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
: I8 k; w$ U$ m& z9 f+ g# {$ \. Z你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。 $ F! b" Z' |3 ~' q( u
注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的 5 x& A- U1 T8 E8 f* s
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机 / P7 U* v$ N+ @# s5 ? {% @
方案。 7 M" h3 C0 n, @& a
9 a5 }0 H$ x7 u( s" f; O. e2.基于名字的虚拟主机:
& \- G) d. F0 [: ^) G1 ` 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 / k: g( f0 d- ^0 A% s# Z
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 , i% S0 Q. B; ^7 I4 M- R, T
/etc/httpd/conf/httpd.conf
) a7 b% Q; X1 y2 S+ a5 O# a/ l/ TNameVirtualHost 192.168.0.1 & Q" o! F0 J! g$ c* u
<VirtualHost 192.168.0.1> 2 B u) t2 j+ R0 b. ^5 j
ServerAdmin webmaster@yourdomain.com 7 Q; S X* d6 ^! g* M7 [9 Y
DocumentRoot /home/httpd/sales.yourdomain.com 6 w3 w# x) x- l2 V
ServerName sales.yourdomain.com
# O6 n/ q5 u$ T+ zErrorLog /var/log/httpd/sales.yourdomain.com/error_log $ a1 u0 V8 k, X |& m% E
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
4 @5 I. _6 {( [+ c/ l; }</VirtualHost>
6 W4 p y# o, ]- e6 r4 e<VirtualHost 192.168.0.1>
9 R9 ^3 l9 e6 d; I' k0 Y# tServerAdmin webmaster@yourdomain.com ( S* P; o' R# ?
DocumentRoot /home/httpd/hr.yourdomain.com & k* L/ e: o# a
ServerName hr.yourdomain.com
) H* R8 t3 w% c, uErrorLog /var/log/httpd/hr.yourdomain.com/error_log ; n/ y& X0 R5 p3 @$ c: E7 \4 ^
TransferLog /var/log/hr.yourdomain.com/access_log 3 w7 t' k2 G! n" Z! M
</VirtualHost> / B- r. F* w4 l
注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机, ) \* F( T M+ O: ?2 `
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS . d5 ?8 F J; \" L. }( ]
都指向IP地址192.168.0.1 ; D# { }1 O8 @+ N( M- d
上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
; f4 d: _' `! U2 V) n没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
9 W; r1 L8 v) ^3 q( A; m若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 9 |* V! G# c& R) u& x: b
提示:上面所提到的相对目录可以用绝对路径代替,如:
! b5 M$ Q1 n" t3 b/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot0 {! I0 }8 p- _7 l, A/ Q7 Z
==================END=======================, }& N G9 v% B! @$ {# i4 F
这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|