|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14389
- 金币
- 2480
- 威望
- 1647
- 贡献
- 1428
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。& K0 D2 Y2 a$ e
$ l4 u% N. r& r2 @/ [! J; ]
一、安装PHP4
- W, Z$ F5 i* s/ s我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip: S1 n$ z" a3 y. H5 S
1.下载后,解压到c:\php目录下。3 {" k, `3 n/ a9 O- A+ `7 U0 l
2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
3 G1 e1 [& F. n* B" P. I2 h' h3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。7 g9 j2 ^; P- u7 `- o9 I
3.1找到register_globals = Off 改为register_globals = On9 w' q1 I/ y0 ^* H& w# l7 W# r
这一步是为了使部分旧的PHP程序能正常运行;9 A+ j: V' O& _& N( `( z# o- X7 S
3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions" f& L3 ^5 _) z+ B; E0 ]& i
以下内容新手请略过
: l* ^/ @0 W& v+ @1 g- r===============新手略过开开始================" m( E7 X8 _( J% I
刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions)
9 c1 L7 t% O' O& L;extension=php_bz2.dll
& d" v0 g0 r. s; r7 d3 a" `;extension=php_cpdf.dll7 c; l3 c4 v/ A" F
;extension=php_crack.dll& P$ Q g7 I3 L; I
;extension=php_curl.dll
( j" |4 G/ e% d! }4 t..... / Z) P6 \" G2 `! F; \% P- B; z
要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
- M+ H7 ^6 C& {/ [! r D! Z其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;
# y6 w6 o( ]1 V5 F. a如下面" p* o6 \& M$ X
extension=php_gd.dll
0 g- C% _5 j& o: _% D6 |9 y5 K' ?;extension=php_gd2.dll
- U9 q4 S; {3 ^3 X8 J8 F6 m按实际所须的extension=php_xxxx.dll前面的分号都去掉。* P" W, j4 K# {) M+ e
=============新手略过结束================
- l( G8 ~3 z0 z$ I/ z4 d; m, d, ^3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp
7 W+ Z5 i9 K9 C) _1 j( _9 e并在C盘建立一个TMP目录
5 y" E5 [* Q' V8 K9 w. R; _3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。
' b0 U5 a( f3 K================================================+ `6 y) }+ T3 B1 z' J& S* ?9 a
二、安装MySql, B: e9 d W! F6 Q0 L/ y+ c$ A; `
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
0 p- u8 ]3 w/ B( ?) q, ]) ^5 O按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;9 v( S0 i0 H+ n* L. ~) c8 ?
运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) ' p8 }! z/ T) l8 k! V3 u
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口
. g) k) x4 m* N3 s- h* x即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;; N( n |6 T) P( l5 k
当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;- C; H2 }- Z T- p7 Z3 t
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;
$ F) {$ e; X5 f% j# f第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)5 i9 B1 V/ i: ^# B6 ^2 b; B
出现: 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>
, M+ j/ z- t+ `: b0 h0 ~* `即安装MySql成功。
' r+ E7 z5 }" a" f2 K( l2 o==========================================
+ f3 A) j5 ]& M9 Q, O4 F% f. U三、安装Apache 1.3.x 及 PHP运行设置
3 R/ I. e9 W0 n/ n5 u$ _" k/ h1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。
9 K4 D8 x; O1 l2 t如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
/ X! c6 e, @; {9 ~" p* @3 o; }0 z有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
% v$ o, N8 r+ }6 O值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。 W7 U ` X x' ~" W+ @1 U. ~
尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。 ( l m$ f! M; E7 s0 S
如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装: $ \4 c4 k2 D/ ]/ u5 [
5 S7 z R8 b2 G/ j! q
ScriptAlias /php/ "c:/php/"
0 S! C4 U' t+ F( Z$ p. }- GAddType application/x-httpd-php .php .phtml " r- r% X0 i7 N1 C. X
Action application/x-httpd-php "/php/php.exe" . K; b# M5 x: _7 Z
注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。 4 B) a2 P1 e( T# ?: A
' {* f# P) Q- B) W" P; z; A; |
警告 7 `3 S$ h2 D" S- w5 K/ M) f. V
在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 ' V g) z, o* k6 |- A
3 m" P* ^5 z( }* y+ e
如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行:
/ \9 j, c7 j& ^( ?* \5 M- w
m1 n- L% Z4 G: A0 v用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,' x" T# M& b( ]% J* p4 _4 t
对 PHP 4:
! U5 a: d J9 R* a) D# ?& cLoadModule php4_module c:/php/sapi/php4apache.dll% Y2 D. u# i+ W
对 PHP 5:
4 ?- w2 x4 T8 a( p, R+ u1 {9 wLoadModule php5_module "c:/php/sapi/php5apache.dll"
7 e5 m7 _6 P, x你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:& I: `% F( E, C8 c' y' p. O- B
AddModule mod_php4.c
: y0 n$ y4 g( [ c% e% c5 ^8 n对于 PHP 5 则为:
* o& o$ p. Z* j1 d# GAddModule mod_php5.c& h3 S, `- d8 H; V' m4 y6 ?
搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
$ S& h: I9 [/ Y: i# F
' D9 l" b b* N" L3 g' d! Q0 f修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。
" b. D( T% P9 E0 Y有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。 # u, @% b3 B: ]
如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 * R" S, C& |9 e3 \% L/ Y: G
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。8 P6 F( b9 U1 Z
============================================
. ]4 h8 _5 ?4 H7 f0 W$ G6 d2 K四、实现Apache虚拟主机的两种方案' W& P* w2 P5 y% H* |2 V H: T
简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序
8 Z, X2 F4 ]( R支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 2 M5 _ E. f- K2 g2 U" F% ~2 H
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也
$ Y$ [" G# v: d( ^2 M; N放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机
" }6 h; R, m' a i设置。 ) B( I3 Z! n( m7 [
设置Apache虚拟主机通常有两种方案
- i! e: C' O/ |5 {( U1.基于IP的虚拟主机
2 J2 A) T8 f2 n. z 这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
& X* d& W" c' B1 a6 N/ U网卡上绑定多个IP地址去服务多个虚拟主机。 7 z. C# m( @, T' N3 L' n
若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先 & f i% o- k8 ~! B
你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到 m2 S! `0 v& R7 M& M
/etc/rc.d/rc.local,确保每次启动后自动运行。 2 J9 e' s `6 q! P9 k7 Z2 L j/ R
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \
2 B4 e/ c$ m4 c7 ]192.168.0.255 up
0 ]8 Q( A' a* X9 F6 W5 E#/sbin/route add -host 192.168.0.2 eth0:0 ! f. ?/ G6 W: |6 o0 [ |: `" P
然后你需要设置/etd/httpd/conf/httpd.conf文件:
2 v% i: `8 k+ }<VirtualHost 192.168.0.2> ! J u C8 L9 _" G+ F
ServerAdmin webmaster@yourdomain.com " j8 C0 L6 ~8 ?1 L. [9 t0 |
DocumentRoot /home/httpd/sales.yourdomain.com * l2 W6 g/ R# `; \. \
ServerName sales.yourdomain.com 8 \* y7 K& }; [5 [
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
* Y6 Z* {8 u7 W; W: {8 rTransferLog /var/log/httpd/sales.yourdomain.com/access_log
) x$ x, V9 Y2 K- {3 R* w; o</VirtualHost>
' b$ N9 ~$ X( m; i5 {, U* P然后分别创建目录
; I" @2 o3 _+ j3 u! j* @/home/httpd/sales.yourdomain.com, ( D5 c3 y$ n# Q3 t: o
/var/log/httpd/sales.yourdomain.com : ~: g' F4 C# ~- @1 J9 R* p
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保 # k7 K+ h* U9 [
你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
' Z9 I. I( }+ W7 M. i3 x注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的
) w5 S* R8 l& a2 ~; u1 d虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机 * E" F: w4 T s0 Y; V# b3 T2 m' M6 w
方案。
8 q7 p- e$ i1 U0 O: P1 r8 U9 S2 ?8 t; r o
2.基于名字的虚拟主机: % c( ?9 {6 {2 L' C- f$ B
它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的
( u7 P* }& |- r7 v6 M; P浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 1 T' i% U6 H4 u0 m8 ?
/etc/httpd/conf/httpd.conf
4 l1 H U) @7 E( T7 N5 uNameVirtualHost 192.168.0.1
* ?2 L0 `* N! _+ ^5 E5 \+ C<VirtualHost 192.168.0.1> & w4 l1 \9 T! x0 {. ?
ServerAdmin webmaster@yourdomain.com
/ Z5 A( }3 ?9 p" {1 S8 LDocumentRoot /home/httpd/sales.yourdomain.com $ C( c: S' F# l% v3 T: @
ServerName sales.yourdomain.com ' D7 u7 Z) z- h% U+ L1 ~
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
- t; H- k. p1 _9 g, T& DTransferLog /var/log/httpd/sales.yourdomain.com/access_log ! |3 @( |& R$ Z& P
</VirtualHost>
; ?* A( E' M, k<VirtualHost 192.168.0.1>
8 ^; a7 M6 |3 b4 b5 b2 t0 iServerAdmin webmaster@yourdomain.com
1 \) Z' _- L. a: N! _1 H* u1 qDocumentRoot /home/httpd/hr.yourdomain.com * ~+ L% h2 j/ d5 ~
ServerName hr.yourdomain.com
$ {4 ?* T4 J. c' S- r CErrorLog /var/log/httpd/hr.yourdomain.com/error_log , t7 p- r& B$ ]: N' M! {6 g
TransferLog /var/log/hr.yourdomain.com/access_log 7 J/ v' m8 A8 @" v: k2 k4 x
</VirtualHost>
* u3 o, R3 F4 i* ]; F M- c注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机, ; h; u; M% Z g9 \4 e, q
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS : I; l8 F" h3 y
都指向IP地址192.168.0.1
% s% d6 w9 y1 J% ^. B2 h( D4 ~4 D上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
+ W# O/ f% o, X* W% k2 A没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
. ~ W0 h$ C; x8 C若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 % s6 J4 [9 u0 I& ^* s9 v
提示:上面所提到的相对目录可以用绝对路径代替,如:
9 M- w) B' Q1 |; a/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot. ~$ n. v$ T. z6 F# Z8 M j
==================END=======================
. v" a0 }1 `; w7 c这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|