  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。
* j1 z' i6 J( x8 U
: o k: L9 X2 B& y一、安装PHP40 u$ [/ x7 {9 W0 F/ `
我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip6 S7 o- T1 u( @# |: F
1.下载后,解压到c:\php目录下。
. k/ z( l; l- ^2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
9 }' _4 e9 R# ?! e8 f! j$ w' v0 c3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。
. P. i1 z' L m! q2 M3 Z9 G3.1找到register_globals = Off 改为register_globals = On
3 V9 D3 a- Q( q r这一步是为了使部分旧的PHP程序能正常运行;
# y& K1 V& e8 L3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions
/ I- [& F/ X: H6 O' n( N/ y以下内容新手请略过3 V8 G! P7 J# b% \6 r( u" e
===============新手略过开开始================6 q2 C' \' J" G. @. n5 e
刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) 6 u4 z9 q: F" X) S; O/ k
;extension=php_bz2.dll! s1 [9 H3 f+ B+ L2 |
;extension=php_cpdf.dll: j1 T% X7 B0 H( `
;extension=php_crack.dll
`5 U; |) L. F- f;extension=php_curl.dll
' f2 ?' P3 N9 S* p5 N2 h1 q.....
* a+ ^5 r. j3 B0 u& Z7 I: D& g要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;7 Q- ?0 T2 ]& {
其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;3 |/ k% e% ]+ G; f# J
如下面5 ^& e& {) B# Q5 h8 j( M& J
extension=php_gd.dll9 j* s; ]; M1 q( L* O! o
;extension=php_gd2.dll
# [( g7 \% T# t& @按实际所须的extension=php_xxxx.dll前面的分号都去掉。* O- u7 x$ _/ A8 q: L# F
=============新手略过结束================
3 L3 `6 S( M& H3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp
% h& e* |% r8 h, p6 }" \3 q1 e: y并在C盘建立一个TMP目录1 E! Q4 f9 u8 {! p
3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。8 X c. \; z* z1 C( }2 w, B, Q6 m
================================================; L: n8 `5 t: a. m2 q% C
二、安装MySql
7 a5 |" l, t; s6 T) w0 O安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;# b# q7 ^# \. e, q, a6 E I- ]
按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;
* i% i/ N% D: r0 i# e运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) 7 ?" X* X- D' N0 d1 `6 g
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口
! b8 J8 |, G0 i2 R1 e6 R( N2 l即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;
1 ]0 v( ^- d _% u* A* m5 m, q当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;/ e0 q. \: \: C6 P2 k) Z! Q! F
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;( d4 x' V0 X* x2 t# Y
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)! B9 X; u4 G1 e4 G
出现: 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> $ H. M$ m' Q9 C! J4 [0 A
即安装MySql成功。
$ F% |+ p6 r5 q4 i==========================================
/ Y0 K) x; C$ a1 O. d* [$ n: ~. }3 T d三、安装Apache 1.3.x 及 PHP运行设置
/ l2 L7 {: H1 d2 F& } e1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。
2 I6 u4 V- z% ?3 o7 |8 X如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
$ ^6 |: {' D; S7 e# \有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
" i! w; ?. S& [8 w6 H0 L值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。 " `8 s5 P' D, X5 t
尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。
) o1 y. G G) ^ P& z& H如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装: " Z5 |4 ~9 C3 F1 [5 c
X* W1 A7 E) O$ VScriptAlias /php/ "c:/php/" , `7 q0 ]* O) [3 h
AddType application/x-httpd-php .php .phtml : }5 {* A7 p- ?! R: ?5 }& `! P7 m
Action application/x-httpd-php "/php/php.exe"
5 ?& ^8 Z& q; _) I( F& D$ c注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。 . `; H; J5 r* ~. t) T, _; M" @
) b0 Z% j5 S8 S. d- Y, @
警告 7 F1 n$ M, H+ M/ v3 n
在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。
2 Z8 z% C- o/ J1 i- u) P; a" ^: b0 y
如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行:
+ ^: f, Z& Z k& z( C1 K+ p' A, u: ?( p( S& J
用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,9 D- ] w) U+ N/ t. y
对 PHP 4:3 d2 |# y! d6 p: R. `* g T: K8 K* z+ _7 q
LoadModule php4_module c:/php/sapi/php4apache.dll
/ m2 i( f( V( ], j9 I对 PHP 5:
' V6 ?0 }0 O8 {$ v) k ]LoadModule php5_module "c:/php/sapi/php5apache.dll") x" @6 ~" p- p9 O! ]8 B. A
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:( W1 n: t( R- M1 U# p& r* h
AddModule mod_php4.c0 Z- C! U8 G, E; G
对于 PHP 5 则为:
: b7 Q: M1 t4 n/ ?1 p5 SAddModule mod_php5.c
# ^; [) Z [9 y+ R搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
7 R! c) t* P/ n9 O2 }1 b& z) e/ M3 h. f E
修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。
5 O& u* `% z$ c有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。
- C# Z6 Z9 d) j6 t, |) H% f2 v如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 9 z9 G+ d# A. o9 O
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。
% O# V l+ o5 y$ J! W6 y' @8 A============================================
* w+ n1 j; ~( l四、实现Apache虚拟主机的两种方案
3 E3 H9 l$ U3 P* _0 t简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序
% X4 x% l. z! K8 K支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 0 J! q( T) h" n6 j6 ?& Y2 J) k
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也 : t. X" Z+ u/ x5 J0 N1 Q( b# `
放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机 3 ?# ?! h- R+ R% F$ {8 x
设置。
0 N, j7 U% m7 t设置Apache虚拟主机通常有两种方案
5 Q; U3 N3 @1 m1.基于IP的虚拟主机 V& w4 G+ E2 y# n$ h
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的 ' y( F; C/ A2 \& v
网卡上绑定多个IP地址去服务多个虚拟主机。
3 t) ^* ~. Y8 n& G若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
& \7 K# t* r/ X你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
* G! M1 C1 {& J" U+ {. t ?7 U/etc/rc.d/rc.local,确保每次启动后自动运行。
$ a7 m, b8 C& d7 W0 y0 r7 S#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \ + Z; d0 c: I: I) t' I
192.168.0.255 up 1 M$ ^0 W1 B* [7 y. I x8 i! F3 D2 E
#/sbin/route add -host 192.168.0.2 eth0:0
# J% m" L J/ \" u; T: m然后你需要设置/etd/httpd/conf/httpd.conf文件: - s9 E J1 G6 f: x# `
<VirtualHost 192.168.0.2> ( }: X+ t# D# f/ b! \: W
ServerAdmin webmaster@yourdomain.com & E) ?0 ?) g' ^
DocumentRoot /home/httpd/sales.yourdomain.com 6 v3 O8 N+ J2 `# t
ServerName sales.yourdomain.com
( s$ U: H4 y0 E# U. @/ AErrorLog /var/log/httpd/sales.yourdomain.com/error_log & }- F$ U* b9 F; |6 B& r7 R; P
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
# j# Z* U# U8 ?9 {' q( E</VirtualHost>
: G. h" A0 M: u u然后分别创建目录 % m( w1 ]0 F" }) {+ g
/home/httpd/sales.yourdomain.com, 1 l' g( I9 w5 |# g
/var/log/httpd/sales.yourdomain.com $ q* J* Q7 g# r& q
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
4 D$ t! e/ ^8 [% x你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
0 G4 {4 h- \: w% z注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的
1 W: M) R5 K! u) T虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机 4 R) r& g7 h9 y: F" U# I! Z& r
方案。 5 s7 l) _$ q% C) S) i/ A; b* H
, u1 \4 T9 @$ @
2.基于名字的虚拟主机:
: Z* w6 ^/ K, `# X9 Z- b$ P 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 Q4 |0 C; F+ Q4 G- Z9 R( U
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件
5 L a D; F8 \; s/etc/httpd/conf/httpd.conf 0 r+ x5 ~0 S/ e! j8 h) p+ l
NameVirtualHost 192.168.0.1 : v: P7 f( ^) z1 j, g3 S8 O
<VirtualHost 192.168.0.1> % f( {2 z) c, T8 @$ U
ServerAdmin webmaster@yourdomain.com
x& N% e$ T* t ~3 SDocumentRoot /home/httpd/sales.yourdomain.com + r* p2 k: G4 o; C
ServerName sales.yourdomain.com
3 [- L$ }3 v1 K2 W2 SErrorLog /var/log/httpd/sales.yourdomain.com/error_log - F7 Y S+ f$ G. a
TransferLog /var/log/httpd/sales.yourdomain.com/access_log * v: W E4 ]/ b( h+ Q
</VirtualHost> 7 F: P- N5 m1 z/ W$ m
<VirtualHost 192.168.0.1>
6 Z- u$ k" s8 B6 x: @# DServerAdmin webmaster@yourdomain.com ) C7 h M, v7 @! C2 ^
DocumentRoot /home/httpd/hr.yourdomain.com 5 l, _ A4 e* w* J' V) e! p
ServerName hr.yourdomain.com
$ ~; Y& R6 l: p3 ^5 J1 F3 P( EErrorLog /var/log/httpd/hr.yourdomain.com/error_log
# k7 d" P5 R W, r+ K9 U7 {TransferLog /var/log/hr.yourdomain.com/access_log
3 {& `$ S+ W0 _" S: s</VirtualHost> ( c1 {5 t/ P4 q$ q- q2 b
注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机, 4 w$ M# A" k% [/ K) h
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS
9 ?& X4 n0 y3 E: [都指向IP地址192.168.0.1
, ?& s0 u. f- |+ t9 J1 f上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
( ?- o* r: N, ^* v* f h没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
7 E: v6 Z% G- A. Q若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 ( K' z( [* `# T+ Y$ {7 [1 e9 D
提示:上面所提到的相对目录可以用绝对路径代替,如: ! Q6 H9 N, w' T9 ?1 _7 i
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot
3 i* i# |; I8 O==================END=======================
5 S& ~$ p) B; X- y$ `- Y这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|