  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。
! Z& t/ A1 s( O5 Q, v& }
7 r% d+ Q" X* T6 j" E. u一、安装PHP4
; [( w- b6 v- v' B' R* M" Y# u: B我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip S M% b7 c" w: e Z
1.下载后,解压到c:\php目录下。1 `. [/ @5 g+ N
2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
% }# w# w7 u! }* q3 y6 |3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。' z# \* h" i* |% T6 q" [' q
3.1找到register_globals = Off 改为register_globals = On
0 P+ N( o# ~( D( p; B这一步是为了使部分旧的PHP程序能正常运行;; a! W2 s! I) T7 b& Q$ G+ m
3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions
" s1 E$ o: y5 \7 Q# T4 v" D G以下内容新手请略过; f" O$ N" o) o( B" A4 _% N: K
===============新手略过开开始================
! k6 Q% s, j* f. w+ N: x6 H刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) - Z! C! J6 u5 Q2 ^6 h
;extension=php_bz2.dll
# Q- A" p# u; _" B;extension=php_cpdf.dll% L7 h& {4 _/ l2 T5 @. l- h- d
;extension=php_crack.dll
! K A) j5 P+ F3 Z; P;extension=php_curl.dll
/ w1 n/ J+ h5 M9 B5 J! ^7 J$ k8 e1 r..... # c% M" m2 D2 a% F L+ P* }
要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;5 k3 d) D$ H! a* f o. x
其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;
# R6 v9 }* W4 K如下面
, Q6 v: l( G$ u* D5 Q9 yextension=php_gd.dll
4 ~/ C1 y3 t+ J;extension=php_gd2.dll
z- |" y: q6 n0 ]' F按实际所须的extension=php_xxxx.dll前面的分号都去掉。
/ u; S# i1 c! d=============新手略过结束================% u# P+ z) t y4 }! y- f! ^
3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp. |9 e% c+ J2 k! O. n4 ~
并在C盘建立一个TMP目录
! q- u+ ^, r- y$ p& U3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。
" V7 F3 H$ t9 p3 G================================================
5 T7 e- r) \4 k3 a+ S& g+ }0 G二、安装MySql- p# [5 F1 k3 a' j, R) D
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
$ [% z" _) R8 P a% e! x, f按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;1 N' f4 r% d3 e; _- ^2 v+ C
运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!)
0 K- A2 m0 u o5 z从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口
) _4 x b! Y1 r8 a( x B3 @即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;
4 `/ O5 V. y% M- d当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;
- d2 P- h+ z# X' |5 c测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态; Z. _# V0 ~9 ~6 u' u5 d9 Q8 o
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123). m' Q' j& f6 s
出现: 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- S, Q# D" S2 Q9 R! O即安装MySql成功。
4 m2 Y @$ d7 E7 T" v==========================================
' B) R$ P% S- Q三、安装Apache 1.3.x 及 PHP运行设置
- t; h) v) F& t: ~" P$ `1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。) Y1 g$ o5 ]1 n# W
如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。 9 ?# P! { b7 L
有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。 6 \" U( D- C# k( z1 J3 N9 u% B7 S
值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。 * I* J! j# d4 F2 f
尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。
7 Q3 [1 ?5 ^# }0 y: d; c# A如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装:
" t+ v' ~5 B. [: _) J, `6 c. X, q: s W
ScriptAlias /php/ "c:/php/" 1 u8 f. d5 V H& m! }. k
AddType application/x-httpd-php .php .phtml # `$ c; j; G' k4 A/ V
Action application/x-httpd-php "/php/php.exe"
2 f) y! ~" M( N6 d |注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。 # ~' ^$ c, k8 i0 |9 |$ A; f' P
! K$ O v8 A" R# f7 ] b
警告
1 `0 C9 o% p& @在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 4 S$ e( {+ \6 T$ F' c( j
. m0 Y ^$ ~+ ]7 T1 ~) C如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行: 6 \3 Z7 R# u/ ^
2 c) T+ B. N) t6 w用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,; t* z& P6 {0 O8 h
对 PHP 4:; E+ A# X! \, d: n T0 M
LoadModule php4_module c:/php/sapi/php4apache.dll
# E# d5 c& U. a对 PHP 5:6 Y5 z6 k0 `0 x! `& h
LoadModule php5_module "c:/php/sapi/php5apache.dll"
$ R& p5 f& y% P+ R& i你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:
8 ?# X- c; K" q M2 w6 P( GAddModule mod_php4.c0 G) L C) G4 g; D
对于 PHP 5 则为:5 ]1 B8 o, n f* m0 }9 b
AddModule mod_php5.c1 ^ ] I4 X( g4 a G! f; A
搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
/ [* k( y2 J8 M! R% d' i: ]/ F2 @7 f6 ^
修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。
6 T7 F- H& U" j# N有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。 8 {# t* k6 u- `3 F( t: D
如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 7 q# f6 @4 A) {' B" ~
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。1 J, S' D) h! b3 ^) Y
============================================2 G2 h0 N( T0 d* m( ~
四、实现Apache虚拟主机的两种方案" R0 g% G$ F- `2 M
简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序
5 g- {0 J7 |; a- i, ^. S* S- Q支持多个Apache服务器,如在公司财务部门有一台web服务器,名为
4 e+ ~4 v) l- G) baccount.yourdomain.com,同时又想为sales部门建立网站,网站内容也
0 s& X$ ^* [- }% W5 Y放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机
" z8 ?! R# w% d5 W: @! u) I设置。
N' g9 u; ]: ]. b9 x5 v& t设置Apache虚拟主机通常有两种方案
2 e2 R9 r W$ E O6 v( c1.基于IP的虚拟主机 4 `8 F4 J) F9 V& z. d7 @2 U
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
; h5 u3 Z" o) n" }: B3 P) _网卡上绑定多个IP地址去服务多个虚拟主机。 & l+ c/ f8 r) q+ U! H
若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
q' F& v! ~( u W你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
; Y: t2 B! C* } {- s0 O/etc/rc.d/rc.local,确保每次启动后自动运行。
, y4 d3 k# W. E; b8 H#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \
# M. y. U4 R; [7 e2 Z192.168.0.255 up
7 K+ k7 s& c2 N' {& s5 T#/sbin/route add -host 192.168.0.2 eth0:0
# d# n( P1 B) B8 ~5 @$ ~3 w' ^" _/ O/ l然后你需要设置/etd/httpd/conf/httpd.conf文件:
1 Z6 y4 S/ U( u+ x<VirtualHost 192.168.0.2> 6 Q3 {3 }, @ o# B4 q
ServerAdmin webmaster@yourdomain.com ) K7 R- j: s k0 u8 ]
DocumentRoot /home/httpd/sales.yourdomain.com
3 X9 w, x( ~; {6 a; JServerName sales.yourdomain.com " V% K3 d% b& h; N- d
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
0 m" k9 g6 M5 |, I1 WTransferLog /var/log/httpd/sales.yourdomain.com/access_log
4 D+ M# F5 p. y% X</VirtualHost>
% x+ s- _ t. F然后分别创建目录 ! }/ K, g# R. `/ Q- D
/home/httpd/sales.yourdomain.com,
* O7 V- O/ W s6 _- i% K2 H' y& E2 j. {/var/log/httpd/sales.yourdomain.com - {( k# _( Q3 U5 z
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
7 P1 D3 G/ Z, {你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
l$ m# }' H2 D+ X) z5 |注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的
( t" c+ T/ _6 s0 ]虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
7 _9 v; H+ w6 T7 T# E6 [方案。 : I1 a+ R. e: W) @/ {: h" W9 j8 \
* {( ?, @* I* t- x1 `2.基于名字的虚拟主机: 6 `$ e3 a; k- s+ F0 @
它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 3 g$ }: j, U o* W4 H) `4 B/ s
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 / T1 O6 @6 x6 c E: g
/etc/httpd/conf/httpd.conf 1 a+ n9 V/ y$ I9 `5 T3 C( C
NameVirtualHost 192.168.0.1
2 n" S( k1 n* ~; q4 ~<VirtualHost 192.168.0.1> & r. Z: R. s. _( i, }
ServerAdmin webmaster@yourdomain.com
, a, u* h8 s3 wDocumentRoot /home/httpd/sales.yourdomain.com ( c1 \$ X7 g- m# P6 K0 X
ServerName sales.yourdomain.com
+ G' e5 }! g/ dErrorLog /var/log/httpd/sales.yourdomain.com/error_log % l3 w. d0 K; h* @( V5 M- K
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
0 c% J9 A: Z1 V& ?- ?# m. G. i</VirtualHost>
$ `4 {& H* E8 ]' R6 f<VirtualHost 192.168.0.1>
' ]3 E) L# P+ k; u) v+ @ServerAdmin webmaster@yourdomain.com
; ` T# c4 e& E( `4 v& ]DocumentRoot /home/httpd/hr.yourdomain.com
) J2 Z0 O( R9 H1 GServerName hr.yourdomain.com
' p8 I# P0 t; h: _8 DErrorLog /var/log/httpd/hr.yourdomain.com/error_log
" N+ z9 T& G- YTransferLog /var/log/hr.yourdomain.com/access_log
* \; w, d9 N4 E3 l" ~8 s0 G S</VirtualHost>
; h0 _7 x/ W/ l8 m- Q: I注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机,
; O: @4 _8 G4 I, v为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS ! u# k3 b) {, w' P8 D8 V
都指向IP地址192.168.0.1
4 }/ F; Q6 e4 y' e. X) k) u1 F上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
- R% l* s( V3 N: t* p. u没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
: L, A' z9 D( Z3 g2 }, i) {4 h) [若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。
5 g" q# s' W6 W4 f" b提示:上面所提到的相对目录可以用绝对路径代替,如: ; y# s4 C: q: J( X. m2 |
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot) d- p$ d& ^% _" D, l/ r7 H
==================END=======================$ C" A8 k( }. b% N4 h
这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|