  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14161
- 金币
- 2371
- 威望
- 1647
- 贡献
- 1319
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。
) }) D& e" C1 g5 v* I5 G' L5 p$ E$ c/ p
一、安装PHP4
; `0 T: u3 B' S9 d- F我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip
3 `5 R7 c. Y9 M5 X! h) P1.下载后,解压到c:\php目录下。
# S" K6 m4 X( h2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
8 `3 L7 f1 ], @3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。
u) _* Q2 J4 t: e) `0 h; M( V3.1找到register_globals = Off 改为register_globals = On/ |% C& `& I! L8 `: y
这一步是为了使部分旧的PHP程序能正常运行;) |% X5 N. S$ N @ g2 H
3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions9 O! r* _3 H, r5 I& \* j
以下内容新手请略过5 N |7 F& v7 F; v
===============新手略过开开始================
4 q' {) P# J. g3 Z" O刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions)
6 U Y _! l K8 o, E;extension=php_bz2.dll
& ~! \- Z* Z7 m; y6 P0 e6 e: Y;extension=php_cpdf.dll: R' b8 G$ V5 T9 K( z$ b3 {* Z
;extension=php_crack.dll
% P" H. ~" {0 J* e( Z;extension=php_curl.dll
" Y7 R) |2 Z, ], t.....
1 I8 U( I! Y- i3 d. B* G要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
! X. D1 t! r: X5 P! z+ C其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;
: I- d4 r9 P* R: @$ N0 Y; {2 X如下面1 D# N5 u9 _! l5 J4 U ?" ~
extension=php_gd.dll, r4 ^" }+ H$ G; H8 n
;extension=php_gd2.dll
1 t, ~2 j7 }: g; \0 R按实际所须的extension=php_xxxx.dll前面的分号都去掉。
, i0 ^& V$ G7 D0 m=============新手略过结束================
+ a4 h) N8 u8 D r/ ?0 G, {2 ~+ ]3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp% S( ?; m: V# j5 h
并在C盘建立一个TMP目录
6 ^# U* J2 ?4 ^% j/ O; ^3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。9 v3 u; Y6 V4 {$ P( i! x
================================================
. A( s/ s, t3 H& J1 A二、安装MySql3 S y v6 o* ~* Z% _
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;' R4 [& f/ b2 k/ x4 }0 A
按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;6 W0 G- ~/ i8 j5 O2 A% R8 M
运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) 3 F6 I/ J6 u$ L: U, V* w$ a8 ]
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口
$ V) m0 C9 X: u即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;! ?1 _) S% t9 c# P0 p, K
当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到; z$ s9 n/ x+ a _
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;
& A7 E# L' u7 i, B第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)
) G0 a' w" ?$ [& n出现: 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>
5 D8 S" P+ }) f* n即安装MySql成功。" k. r4 v; v% C$ N
==========================================$ `4 O3 K4 i N5 y5 }
三、安装Apache 1.3.x 及 PHP运行设置
; e4 c2 k- d) S/ o) D0 ?, v/ h, W1 b* }1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。1 l3 @8 c. H( L' `6 \
如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。 1 S3 Q) o/ N; [3 n3 O
有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。 ) w% _. C* _: z& d
值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。
/ d- I# I: L0 I Z& Y c尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。
$ o/ U5 {9 ^) q5 X0 ^如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装: ) u% p( E: ~/ P+ D, j: W
: s8 A, x4 L5 Q. m* W' z
ScriptAlias /php/ "c:/php/"
; Z- p4 ]8 f) r0 RAddType application/x-httpd-php .php .phtml
u) G2 z3 A& e' G+ O, AAction application/x-httpd-php "/php/php.exe" / ?8 Q5 {5 I) g1 C6 b2 X8 E
注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。
5 A1 Q2 C4 ?% }# N, O0 ?4 d. g) z& g. B( C+ y% f) |
警告
" O( j) J5 r n" W在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 ! G! X# i+ `3 U& S/ e$ M4 i8 F
4 e0 {2 ^5 u- W& m8 v+ c0 m如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行:
4 ^3 D* b# _, f7 P3 i+ B* L, E
- [8 S0 u6 y# h1 c* ]3 `& \. {用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,
( _" T" ^" m3 Q: L' s$ G对 PHP 4:6 b9 ~( a- {% H; n3 O
LoadModule php4_module c:/php/sapi/php4apache.dll! y" p5 R, X- z8 C6 D* g8 n
对 PHP 5: T- h/ e5 R8 X8 ^2 R# q
LoadModule php5_module "c:/php/sapi/php5apache.dll"
( t9 Z h: [0 B; ?你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:0 V0 v" H6 k$ {8 g6 R
AddModule mod_php4.c
u! P1 l' {# z# Z6 R' n, f7 ?对于 PHP 5 则为:
! p0 k# }- S1 _2 hAddModule mod_php5.c- x6 m: [! C" u) G
搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。 / F1 C. M" T2 K9 x4 }$ W5 f; c: x: v
) D' G" h- H7 K, n修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。 . I' s ^# P6 W. N; C: c( P% K
有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。 ; R( ]( W8 i8 t4 y- F( f5 x2 V8 z
如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 & }6 C+ [% @- S* i: U+ `% i
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。 W1 o3 [# c- H
============================================" Q: ]- f1 e6 {7 M" p
四、实现Apache虚拟主机的两种方案/ L5 c9 X/ t% F! W# a
简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序
m. g W" C2 P+ s- c+ k# U支持多个Apache服务器,如在公司财务部门有一台web服务器,名为
: S+ h# |2 Z: P7 p* `account.yourdomain.com,同时又想为sales部门建立网站,网站内容也 # Z% r# b: T! d1 F
放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机
. [* c8 E: ?3 V8 L" B, o4 ^, U4 F设置。
& Q" F, ?* M) E. O2 \0 s设置Apache虚拟主机通常有两种方案
9 h1 O' l* Y" O3 W1.基于IP的虚拟主机
h$ b) {1 D! e/ G1 h 这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的 % S# N1 U: K5 T. m7 P4 \. x$ P
网卡上绑定多个IP地址去服务多个虚拟主机。
* g! K2 ~, m! p4 r若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
. x5 c* e- g+ Z+ F% D你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到 : F9 M" Q) B3 h( c5 N2 Z8 ?
/etc/rc.d/rc.local,确保每次启动后自动运行。
! a- t+ L3 D3 ]3 M3 ^3 r8 G; w( ^#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \ 1 Z8 R: d/ r& M5 m/ o
192.168.0.255 up
4 F' R7 |2 Z6 |5 B4 T9 z4 ?# x" R#/sbin/route add -host 192.168.0.2 eth0:0
% ]1 j- Y0 q% I a _然后你需要设置/etd/httpd/conf/httpd.conf文件:
. D% I( _* d+ l4 ]<VirtualHost 192.168.0.2> 3 p6 S# F" `0 l6 _' z) \
ServerAdmin webmaster@yourdomain.com
" X5 u: l: p! s3 w. L4 j! ^7 MDocumentRoot /home/httpd/sales.yourdomain.com
9 }/ U. |, t" Z) I! s8 p/ tServerName sales.yourdomain.com , u8 g% u4 t( C1 ~6 F9 ~
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
$ N' c& K/ B$ ^: V$ ^$ P( i6 fTransferLog /var/log/httpd/sales.yourdomain.com/access_log . e" o1 G. Q( T4 Y2 U
</VirtualHost> " L9 T* D7 l* a( u* M7 `+ y
然后分别创建目录 2 p) h* z0 E7 Y3 f6 H- ^
/home/httpd/sales.yourdomain.com,
# Z) w. g0 v# Q: [; p4 e/ ~/var/log/httpd/sales.yourdomain.com ! ^; I6 m( K) t4 H# k2 g0 b$ c ^
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
: k( F6 Z" M4 |你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。 ( h* ~. `& q6 u! f
注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的 T: {0 [$ G7 m% Q
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机 4 X+ P# \0 P# n1 ^3 }
方案。
( v0 \# n4 `: x1 H
# d [& r9 h) O8 h0 h, B2 A2.基于名字的虚拟主机:
) s5 I: ~# ~6 B3 u2 z 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 ' K3 k3 H6 h: ~4 D" G5 J
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件
# L' `7 @5 \* f8 V1 n( V) B* W/etc/httpd/conf/httpd.conf 1 K" Q9 j4 W" x- F" z) M
NameVirtualHost 192.168.0.1
9 N# _& j: @9 m. v7 t x7 P2 S( B<VirtualHost 192.168.0.1>
" d& `" V8 [" D0 A# {4 |ServerAdmin webmaster@yourdomain.com
+ b7 `. M, I: d+ k- I% b- FDocumentRoot /home/httpd/sales.yourdomain.com ; `0 f: b. ^# f& L Y
ServerName sales.yourdomain.com
) o' N, Y7 v# _4 o2 UErrorLog /var/log/httpd/sales.yourdomain.com/error_log - |. E5 X5 m4 [6 \9 G$ F
TransferLog /var/log/httpd/sales.yourdomain.com/access_log 5 O/ ]" Y8 w0 \) I
</VirtualHost>
3 n3 g7 Q4 n! y! m! A/ ], E# V<VirtualHost 192.168.0.1> + S0 [; |0 f& F6 J
ServerAdmin webmaster@yourdomain.com
2 J; W8 J, p/ e( V" W2 _4 F1 pDocumentRoot /home/httpd/hr.yourdomain.com
& b1 f. k. {$ n1 e/ Y9 yServerName hr.yourdomain.com U; |5 @+ K4 p& e# L4 R
ErrorLog /var/log/httpd/hr.yourdomain.com/error_log
( O" K8 E0 G4 w" {TransferLog /var/log/hr.yourdomain.com/access_log
* q2 m/ F0 |+ h</VirtualHost> 5 s# ^# o4 I! a7 [; {& E
注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机,
2 n$ m( Q9 y( H为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS
( X: ]2 r, E7 B1 }4 C1 b# j& q0 {都指向IP地址192.168.0.1 3 ]8 \5 _8 ~* r
上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能 . D9 L/ @- S3 p
没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案, 8 f4 ^' H9 ~2 S/ }0 W
若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 & m! i% G3 f. }& h" j
提示:上面所提到的相对目录可以用绝对路径代替,如:
$ d5 j2 {. q% G' {9 \ Y; u/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot1 f4 G+ J/ C7 L. B5 l
==================END=======================9 J; i6 v( p; ]7 f! S' i
这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|