  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。0 N. i D3 r) C+ d. ?+ c+ I$ ~
+ X% }8 q9 N0 [+ W4 n一、安装PHP4
( m2 \3 f2 i5 a8 C$ m7 I我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip( Q7 f% z# u" Y
1.下载后,解压到c:\php目录下。 E5 H1 w* w) d4 z
2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
: O2 C) C/ y' N; W" q3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。9 t/ |6 J/ V. O9 A3 Q1 u7 z3 K f& X
3.1找到register_globals = Off 改为register_globals = On/ E) T% t8 s3 h$ `2 d) l' {
这一步是为了使部分旧的PHP程序能正常运行;
0 I2 |" q7 v: k$ X, t; v3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions# D& R: `8 T; _+ j; r
以下内容新手请略过3 h, o( A, O1 M
===============新手略过开开始================
4 g* W' Y' ^% ?3 R2 S% \刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) 0 f# T* l! [0 d1 j! k( s/ ^0 @
;extension=php_bz2.dll$ _9 Y7 b8 F5 H. c" |' G
;extension=php_cpdf.dll
1 H9 ?3 l: m: c, H8 b" m9 I! f; S;extension=php_crack.dll& K+ T& h: z9 c# i. \' R4 ^( Z
;extension=php_curl.dll
$ O5 O; h5 `6 V! U2 G; h6 ~( P5 N..... & Y+ N3 v0 N2 Q% o, C
要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
) c1 G# x( E& t7 p# p其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;
" Y' V) {+ }% s4 [ f如下面
* b: e& Q( y$ F; zextension=php_gd.dll8 [. g; Y3 S4 }1 {, q( }
;extension=php_gd2.dll
2 F6 W8 u8 R/ z" |按实际所须的extension=php_xxxx.dll前面的分号都去掉。- Z9 H: W ^+ z3 e6 v; H
=============新手略过结束================
: v; A g/ s- X$ ? e3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp X0 j; {- L* h, w i
并在C盘建立一个TMP目录' V* f% U( ?% ^6 I! q
3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。2 ?/ @" o, @0 v- C/ Z: ^8 e
================================================2 r. q. }- Z* M* E
二、安装MySql" f) ~: Z, w4 w3 h4 v5 B0 r' t% N- @* a
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
) r" w2 s: \/ v$ t. I/ J4 Q1 L按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;8 _# t) s& F& O3 @$ O: k
运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) + ~- V) u* T6 E: W
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口! {5 g6 m2 o# Q- E( c
即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;
+ y1 Q& K6 W' X- `. ^当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;7 i% J, u6 Q, I6 W" ~& @) O
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;
/ h5 _9 w y2 @* L k% Y# ~第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)
* T1 F0 _5 T. {) c- H出现: 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> - c9 e3 h B, }+ B& ]- p% |+ c7 V; Z
即安装MySql成功。. O4 b$ k2 q! ?1 h/ J7 g
==========================================% J( y! F5 K* T
三、安装Apache 1.3.x 及 PHP运行设置0 ]6 Z3 T+ i5 J5 U+ _# M# f7 D9 ~
1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。+ L) k/ v" \5 @, L. {) U- |' ~
如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
1 g* A' f: L/ S) c Q! Y有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
6 u& U# [0 l X+ X值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。
3 f* P) \9 L& Z& z尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。 1 H8 R! v+ F1 Z3 z: A
如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装:
$ w& U9 s8 h4 B. `
5 a" T8 h! B/ Z3 X3 Q% r& J2 j, v0 vScriptAlias /php/ "c:/php/" ' V9 \9 S! i m) ~ l. a) I9 L
AddType application/x-httpd-php .php .phtml % |6 k8 p7 {/ E: q
Action application/x-httpd-php "/php/php.exe" ) |5 r1 ]/ L, w
注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。
0 Z" E7 f0 S+ W3 v# V: t/ b! m! [9 B6 c0 f4 ] u# z
警告 0 r1 H/ v3 O% S
在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 9 L$ ~3 `, i5 Z$ V% N; ^, m
, t( Q: @. m+ d( Z# V
如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行: 3 ]- x6 D+ l, B, s) J5 h) x! }" I
m! y! w0 E. v. l/ T4 A! d用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,7 O: p% V# n7 B, }' T* ^8 ^& }4 a
对 PHP 4:
* E" B! e, j2 `* N$ gLoadModule php4_module c:/php/sapi/php4apache.dll! a2 e* a0 x# H1 m7 N' `& H
对 PHP 5:) V- A7 D, w: t. k* R) d6 C6 W& b
LoadModule php5_module "c:/php/sapi/php5apache.dll"% [/ |/ V3 E. k% l" R" Y: ^# A
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:5 p q4 E$ L7 s* X1 f
AddModule mod_php4.c
) V; K' O$ [5 v& p: x对于 PHP 5 则为:$ e' L% O8 a. B @
AddModule mod_php5.c. P2 `7 ]) _) @
搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
. U! ~. W+ i. b& u8 ~" ^% J: {2 `
( F' [ r ?$ J2 U. W& h修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。 " U( ?- J' [, ]8 v/ Q
有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。
; h; l9 I6 q7 `如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。
4 o/ |* C: K! F* R注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。
2 Z# G6 W6 @2 y" J9 ?. R============================================, f" j4 o q( a! o+ W1 h
四、实现Apache虚拟主机的两种方案6 ~3 |3 x5 }( n
简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序
2 u9 Z3 I+ p5 R6 I支持多个Apache服务器,如在公司财务部门有一台web服务器,名为
9 o/ M2 E1 m: z$ D. Yaccount.yourdomain.com,同时又想为sales部门建立网站,网站内容也 8 R0 R' ^' }9 S- j7 o
放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机 & B. U- c a1 ]8 H7 x5 y) W
设置。
0 |! g' B, y4 U, Q; i9 B设置Apache虚拟主机通常有两种方案
0 Q$ a) O7 w" X) [1.基于IP的虚拟主机 & ~9 S! l9 E: r3 {7 ~7 I
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
* P" J7 e# l$ M; s/ E2 ?网卡上绑定多个IP地址去服务多个虚拟主机。
9 s( F7 g1 J/ s: B若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先 " Z% W% Q$ Q t9 K; |" u/ d
你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
; l P6 @+ B& [ i/etc/rc.d/rc.local,确保每次启动后自动运行。 4 a6 P, k4 T& E- c0 Y$ `$ u& h S
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \
5 S' V8 |( ^3 z, [8 ]1 g192.168.0.255 up K S; ?7 N& {+ n0 |
#/sbin/route add -host 192.168.0.2 eth0:0
+ n* i: a3 `, _5 n J9 c2 i然后你需要设置/etd/httpd/conf/httpd.conf文件: / Y& w; @( |! o5 _( m& J. l1 d3 N
<VirtualHost 192.168.0.2> & F) R$ ^3 K8 ^" r
ServerAdmin webmaster@yourdomain.com ' i' Y, Z1 J; z4 f. m
DocumentRoot /home/httpd/sales.yourdomain.com
: f$ e' i1 B9 ^. y; i- EServerName sales.yourdomain.com 2 P! {& P# ^0 Y, O. U r
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log ! d7 ]+ ^/ G8 r! X6 J3 u( M
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
7 i8 s6 R$ T4 B( g; x! ~</VirtualHost> # p- C/ M4 w, w7 f4 j9 B
然后分别创建目录 ) m' b2 F7 p- X6 L% K: @% m2 u
/home/httpd/sales.yourdomain.com,
8 f8 @. v7 M7 I! o& J/var/log/httpd/sales.yourdomain.com
* A1 q+ J# B6 f1 b放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保 0 P& ^" n& r; z$ ]: J1 F
你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。 s$ g9 p: H. P1 j0 @& c
注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的 . M( Z _# |" ?6 m V f2 {9 F
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
. o! f# c4 Q7 y. b- l方案。 2 W$ `$ p1 Y; X: a, O0 R; U0 ?
# g8 y* A9 a9 ?5 C7 |! U: @2.基于名字的虚拟主机: 6 b/ h4 h: F" s9 K I, x: {
它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的
* w% g. ~; G7 K1 E/ ^: U浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 ) m, R; e6 e, W, _: F. ~6 S) Y
/etc/httpd/conf/httpd.conf " ]8 v* ?/ D: c" s
NameVirtualHost 192.168.0.1
# X% v' ~% _ n<VirtualHost 192.168.0.1>
* u" w0 `* S9 l% ]1 W( n/ FServerAdmin webmaster@yourdomain.com 4 U3 ?) ~+ o( v1 y0 o' I/ H8 K9 c
DocumentRoot /home/httpd/sales.yourdomain.com & F5 h: @3 [$ D9 n2 v+ s9 `
ServerName sales.yourdomain.com 9 J. {0 ^" i8 [! C! ?
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log 9 \' h8 U) W4 _) B/ h8 P
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
* ^9 M. _$ x U/ z</VirtualHost>
. p; l8 g: e" ]- y8 u- d* B q8 \8 L<VirtualHost 192.168.0.1>
) o/ H% d. R7 d5 x" {( iServerAdmin webmaster@yourdomain.com
9 `1 S: z9 D3 w) u! CDocumentRoot /home/httpd/hr.yourdomain.com
! O$ c5 d0 F3 ]ServerName hr.yourdomain.com & m( k1 i3 C) j7 c
ErrorLog /var/log/httpd/hr.yourdomain.com/error_log 3 T9 v& ? d& t
TransferLog /var/log/hr.yourdomain.com/access_log 9 \. E2 c- l5 u4 r1 s/ x" \
</VirtualHost>
, \4 z, E& o8 b' _" M* U( e注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机, : j: ~" U7 F4 ~! D& C3 z
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS 0 B. h ^+ K& A8 z: q& \' D& h2 _8 ^
都指向IP地址192.168.0.1 Y, z) n6 L; f9 s
上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能 6 N- C! N" S! L% @
没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
& X$ \2 E! J7 D* ]% N若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 * ], D6 @! c7 M' z$ z4 C; p( \
提示:上面所提到的相对目录可以用绝对路径代替,如: % p- n& ?8 h; c7 L: r X
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot
* m1 X. T$ `/ z; G==================END=======================$ K' B s# l G6 O; x0 ]4 k
这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|