  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。
S: r, Y0 Z0 n) ?- ^) S( I* I o3 v
一、安装PHP4
0 c4 @! S4 b# K' g我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip
2 I9 y! g% F8 H1.下载后,解压到c:\php目录下。* j/ C* }! p+ X. T5 T8 ]$ f
2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
; x0 o. G S+ S- ^1 ?* G3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。/ c5 h# Y- u% H& I' f
3.1找到register_globals = Off 改为register_globals = On# }; O8 e( N! p, S$ W
这一步是为了使部分旧的PHP程序能正常运行;
; ^7 U' o# \" D3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions
2 r0 m* o) b5 ]以下内容新手请略过+ z+ O, k8 ^6 {
===============新手略过开开始================3 H: M g! m v; {) \# K& K
刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions)
* s; z( E6 j* |;extension=php_bz2.dll0 E4 w: `3 F- O6 I, t4 y* Z9 o2 [" k4 I
;extension=php_cpdf.dll/ D0 G# _: @8 ]. E! r/ V5 W
;extension=php_crack.dll* [9 {' P; T+ e5 i% z0 Q
;extension=php_curl.dll K- ]% R- y1 p5 i
.....
* [3 f4 B7 A& N+ l4 R: M9 B9 q. d要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
& e; o: F9 I* q" j$ F) S' u1 i其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;/ C6 [8 z- z x- R8 U# F8 H
如下面
# }# e6 w, p0 P8 p2 nextension=php_gd.dll
, w5 R* C. n) ~1 I! }- B;extension=php_gd2.dll) b! b* k7 S8 J+ o) l
按实际所须的extension=php_xxxx.dll前面的分号都去掉。
+ b7 r' J$ q L' v$ f) X) W. t=============新手略过结束================
! t3 ~8 I, i4 }5 h$ T3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp
% B: a+ `8 w8 a3 w7 a并在C盘建立一个TMP目录
, F: f( ~* J$ }& w" T! e b3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。
" Z( Y4 Z2 [8 j" U/ c================================================
3 H; t& F, v! L" L7 `5 K+ A二、安装MySql
/ ]" v" Q p8 R安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
' y" x. n1 v# ^( J" r+ e/ h2 x6 r5 s按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;1 b! Q& `5 a. m% p$ l
运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!)
5 C; r* I6 \& ^& N9 P" h从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口, p6 q E8 r1 S9 i" E
即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;
# | o* R$ u/ R- {当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;4 `- |. t% P' n2 R, H3 x
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;
8 R6 s, S- u/ N第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)
8 |2 d" D6 A$ v7 q1 ^' O H3 m出现: 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>
y! I x, m- j即安装MySql成功。 P- A+ n/ O/ F- K# n
==========================================3 @: j5 E* Q: N8 @
三、安装Apache 1.3.x 及 PHP运行设置
) J. G8 y' e) `1 I* m1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。6 e$ A4 S* Q, l, r* I
如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。 $ A2 {* m7 t: H( V% k9 C
有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。 9 i- z1 S$ j" H* ?
值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。
! _3 v+ K: J9 ~尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。
. c/ O0 x0 v! \, G$ G S1 S1 ~, y如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装:
9 n u; x) S6 O* ^8 \% a' @
/ j& j$ D/ X1 X6 e& RScriptAlias /php/ "c:/php/" 2 d+ E3 f" M3 k% l1 z( Y
AddType application/x-httpd-php .php .phtml 1 q! @2 }. q9 d) H4 t
Action application/x-httpd-php "/php/php.exe"
6 c9 o. M' g) E: g注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。 5 J2 K$ U: g" Z/ |' `) [
/ N8 |9 a+ O& O
警告 0 R5 i/ u5 e4 L8 g
在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 6 \( G2 I0 E8 Y' t" _
" T' }; m9 x% |) }$ C
如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行: . Z2 r1 m/ O' @5 J& X
% B2 R+ y+ y* R0 F# C
用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,' `0 X( ?+ N% Q
对 PHP 4:
3 ~, X7 q' G* M" S/ M3 s- }, NLoadModule php4_module c:/php/sapi/php4apache.dll: E' [5 i, t" f, t0 P, G& u) o
对 PHP 5:0 d! K3 p8 U! j! Z2 O
LoadModule php5_module "c:/php/sapi/php5apache.dll"& x% [4 x6 l* }% s. D
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:
5 b9 k# y" `1 B( U3 K" [6 G: UAddModule mod_php4.c1 b% y9 U( Q3 _3 ^& j! _" Y) }
对于 PHP 5 则为:6 X# e; ?# m( n8 K2 r1 d
AddModule mod_php5.c
( _5 U f6 P* M8 [' Q% @搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。 0 |8 a% I+ s& ]7 Q- o
; V' W. W2 k G
修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。
& ^6 ?3 t# C3 A8 W. f有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。 2 Y' o# m9 k6 }+ s1 `
如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。
# B! b* u6 c$ U9 c注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。1 A' X5 w* H; u+ F
============================================
3 L* N) j; d4 _四、实现Apache虚拟主机的两种方案
N1 I" H) _( k1 k简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序
o, Z: R; {6 @$ V8 ]4 k支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 4 M$ y7 |7 J) T8 N% X2 B) Z
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也 8 p3 k. P P# o* }
放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机 " `) i* m. P; ]1 j C
设置。
5 |1 n9 _- ^( u$ D! ?设置Apache虚拟主机通常有两种方案 . x4 S8 C* _& U+ }3 r& _; k# N
1.基于IP的虚拟主机
6 B7 V$ E! @$ o# } 这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
- V: B" }, g7 ~3 n3 C/ u- ]% \网卡上绑定多个IP地址去服务多个虚拟主机。 ' w9 B j/ e1 N" X
若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
1 W) I) _7 x9 `8 W' C你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到 ; B9 L w7 v) c6 ]# n4 S
/etc/rc.d/rc.local,确保每次启动后自动运行。
$ c L" t p C7 f* }#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \
* ~& b! R% H7 g' k% h: v5 b% k192.168.0.255 up
- Z3 R9 W" n/ O/ L#/sbin/route add -host 192.168.0.2 eth0:0 4 A" Z( _! `( u
然后你需要设置/etd/httpd/conf/httpd.conf文件: " I+ y2 w# } s1 K! g7 b% w3 d
<VirtualHost 192.168.0.2>
/ B) a9 ~. E: |ServerAdmin webmaster@yourdomain.com
2 v. Z7 n1 ^$ d! i( |" oDocumentRoot /home/httpd/sales.yourdomain.com
2 u* |3 C* g* i; r3 L+ R n' u& qServerName sales.yourdomain.com , n9 }2 N1 ]: C9 c5 m* C
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
7 u0 B) G1 p8 l OTransferLog /var/log/httpd/sales.yourdomain.com/access_log 2 Q$ s) P. |: Y+ n; S9 x* ?
</VirtualHost> . k3 r d! [1 N* R
然后分别创建目录
7 T5 d" Q, N! b" J9 p" _5 s' W/home/httpd/sales.yourdomain.com,
4 S1 V8 T2 X& ~& V/var/log/httpd/sales.yourdomain.com ) q$ k( }* Z/ U+ N7 @$ s
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
+ m* Y% z9 Y( F2 ^# E. C( i你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。 0 H8 `1 [, u9 B' w4 M4 Z
注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的
+ Z# Q) y F! \& V$ D虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
, F& n. v5 `+ d( D方案。
: i; R$ u2 y; Q! x2 ]0 i. x8 Q% A( {: J7 O2 [% D, Q! k( ?4 D
2.基于名字的虚拟主机: 6 V- X" H4 b) _! {% d9 j: ?
它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 8 f. O0 X! }" g) ~
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 4 P% p7 [: `' m7 w
/etc/httpd/conf/httpd.conf
% h- _: T, q. ?7 k- W' }NameVirtualHost 192.168.0.1
' D7 |4 _( n7 {% f' E! V- V6 o% r<VirtualHost 192.168.0.1> ; J1 L7 z) s( F) ~, O7 | V. w% s: V
ServerAdmin webmaster@yourdomain.com
+ ^- p+ u: V, LDocumentRoot /home/httpd/sales.yourdomain.com . g$ e; b/ }; A6 e) n$ @1 [
ServerName sales.yourdomain.com ! [3 s( x+ C3 a& Q' w* i1 [( r
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
% u% q& W( r5 u: U+ LTransferLog /var/log/httpd/sales.yourdomain.com/access_log
4 Y/ Z8 o% _3 C</VirtualHost>
5 @" I% w |8 e6 W, x- D$ Y* z<VirtualHost 192.168.0.1>
6 y1 K0 c1 L0 v. w/ @ServerAdmin webmaster@yourdomain.com 7 P! d0 {# Z4 Q4 A3 m
DocumentRoot /home/httpd/hr.yourdomain.com & i* {. {; o; m/ F5 p9 [ n5 _* A
ServerName hr.yourdomain.com
5 L8 M7 O( Q2 U; g5 E! ?ErrorLog /var/log/httpd/hr.yourdomain.com/error_log
# _/ V$ `' g, A8 A# B0 vTransferLog /var/log/hr.yourdomain.com/access_log * W4 f0 b3 @9 ~
</VirtualHost> 5 i% j' w5 G3 X* _" F
注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机,
7 C# A7 [6 b. a; Q# f) K为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS ! Q" }: y: v" h" z. d) {
都指向IP地址192.168.0.1
: Q/ |/ p P7 M; k9 l0 x U上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
6 H+ _1 c& @3 K7 D& D没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
5 B! o& K1 k2 e5 ^7 B3 _若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。
$ b" ^# d$ p9 t" Y* p# Z0 }( \提示:上面所提到的相对目录可以用绝对路径代替,如:
) {$ G' s; d4 P. K/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot- p2 p' ?% I" s% S$ }9 L N
==================END=======================
) m: q% w( y P# p% e$ C这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|