|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14321
- 金币
- 2446
- 威望
- 1647
- 贡献
- 1394
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。
; ?- M1 K& S) Y' X0 X% b$ |+ S7 C4 v; y0 O' j& C! R# a" a
一、安装PHP4$ @5 Y- \( L( R% [/ i2 `( ]
我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip
/ o. H$ z) Q; ?( v/ G6 t1.下载后,解压到c:\php目录下。
% }, K& \7 ?7 K9 U! B0 F2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。% |5 q9 H; b( P8 j; L+ P
3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。
% P s' u. P: v0 E" ^4 `3.1找到register_globals = Off 改为register_globals = On/ p+ L% \. U& b' X2 H
这一步是为了使部分旧的PHP程序能正常运行;
* A$ ~4 y9 B+ ]# y3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions
( ]+ P$ l9 j/ }以下内容新手请略过
4 i9 ^2 C2 I4 A- Y% n9 g/ g===============新手略过开开始================+ ]/ F$ z, E' r* L
刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) " I* v* ? O+ |8 v6 @: @
;extension=php_bz2.dll, T$ h1 G- ~1 A2 u* P$ J2 `
;extension=php_cpdf.dll
- B7 k) @5 A9 a, s6 N4 @* }3 O;extension=php_crack.dll
/ J3 T$ ~3 j# {- F;extension=php_curl.dll
' s b/ Z' v; T" y, M7 s& F: [.....
3 S- S3 p" c3 K9 g. w ~1 F# s要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
! z! v9 Q. d& r! w9 X) ~1 b4 R其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;! F9 ]: y6 [7 o8 U
如下面
1 v; A T) T1 |: l3 J: Rextension=php_gd.dll& c n2 Y3 Z, @6 e
;extension=php_gd2.dll
0 G/ a' r! J& r4 v6 ^; Z7 D. f0 L) o* m按实际所须的extension=php_xxxx.dll前面的分号都去掉。: ]8 Q& d" W4 ~; ]/ ^3 t2 b
=============新手略过结束================! Y: [. F5 }9 z2 [- ^) l
3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp
! Q7 k7 C5 g$ Y3 Q并在C盘建立一个TMP目录
$ J8 e; k; C$ L0 x) l# [% R6 u8 D3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。
4 S/ y: ^! B1 k" Q# m3 k" n================================================
$ a5 t4 a& u! s二、安装MySql8 t" t+ x$ y4 X7 n8 n: x: t) v+ x# z
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;" u" J' u5 t, s6 u, W
按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;
' \, S+ Z1 s1 h0 N2 I运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) 3 s' t/ S3 M. C4 K+ W
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口, F, R1 Y& Q" ^
即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;3 s7 O0 y1 u( U' t8 G5 Q
当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;
! x0 ]% m# g/ ^6 b8 n l& c* ] l测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;1 t2 q' d8 J( H
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123): S% ^$ Q: w; ^: ^; W+ C, [
出现: 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> ) K. N" V6 n* a1 n0 s5 Q
即安装MySql成功。
" w# a$ q6 K0 S- o) u==========================================6 [1 b; E. k* v/ B M
三、安装Apache 1.3.x 及 PHP运行设置
4 _0 b2 V# p+ E5 u5 Y- U5 ], k1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。
& i5 V1 p' }& Q7 b+ f如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
# z, w% C6 o; ?* R0 X- J" Y; J' g有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。 + N; t# A- R- {0 _ R* |
值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。 5 Q# I9 P3 _+ J; M* q; a9 T$ V
尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。 7 T# a4 C# M# |' P' ]6 c+ R
如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装: 6 k8 z$ T; k9 g: |
. ?, G8 {+ [: ?- ?, j$ AScriptAlias /php/ "c:/php/" . Y0 p/ q9 _6 r `' `" k
AddType application/x-httpd-php .php .phtml 0 G o# R; h) Y
Action application/x-httpd-php "/php/php.exe"
5 @5 {% b4 F( U# b) s$ B' S/ `1 C注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。 , q! u2 s8 I" n' J( D% ^
, S0 K9 _$ N; r4 _警告 " k# J' R2 f& ]) y- H4 n2 J: N
在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。
/ G& }: P) [4 G) E& `; P5 c/ Q; u4 H, _, ^& q! E- |
如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行:
5 r( t2 u) q: _; \9 C; K1 E( O$ r- Z* V; r7 \" ]- ]; y) C
用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,1 K( w' m) m* F$ O
对 PHP 4:0 d0 q6 R" Q( N, ~2 x! u. u
LoadModule php4_module c:/php/sapi/php4apache.dll+ N0 _: U3 L0 w- C: Z4 c- {
对 PHP 5:
; S' a. l& B0 V6 v+ ]LoadModule php5_module "c:/php/sapi/php5apache.dll". X# D8 P1 K& o3 \6 N
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:
+ U" b8 i& k( ]/ M4 YAddModule mod_php4.c
7 |" [) T `% W; H( ^对于 PHP 5 则为:
, `0 ~( ^% a; y9 D/ pAddModule mod_php5.c& D% [ @5 u0 K }
搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
! X z8 b8 s9 D7 B! Q6 m" k K2 o0 h( B! D& ~% `0 N. {: K
修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。 ' Y0 M3 M8 ^$ H1 ?0 L0 k3 L
有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。
& _9 `$ s1 N8 g( j' `0 A H( g3 P: \; J如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。
5 W6 j9 t9 V" K; S7 Y6 B注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。4 x4 {7 o9 j; e; z/ c
============================================ a( m0 G: r" |: b, S0 Z) z
四、实现Apache虚拟主机的两种方案1 T. ]' y: X5 z( }8 ?
简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序 6 o' v# T7 i% ]$ G0 z& N) `' T
支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 " x% y/ S- [6 w3 ^. Q
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也
/ n. v* x5 t, m放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机 1 `( _) l+ l- V$ K
设置。 6 x9 h j5 U& Y5 I3 p3 w
设置Apache虚拟主机通常有两种方案 5 [# Q/ B1 N0 E( r* [+ S% b
1.基于IP的虚拟主机 8 w7 U! |2 k& h- M
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
& [0 w; ]/ L1 U1 X网卡上绑定多个IP地址去服务多个虚拟主机。
3 [ u. h. ~" X, i! E若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
: S$ b x9 b, E0 _你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到 - P9 _2 g) O( R- r3 ^4 ^
/etc/rc.d/rc.local,确保每次启动后自动运行。 6 V& p' L( }* z. R! v, q
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \ ) r- F8 B! S) q4 B# Q6 x
192.168.0.255 up 2 J; |1 q- |1 h4 J( x5 r o: b
#/sbin/route add -host 192.168.0.2 eth0:0
7 P4 [/ M U9 a9 p- K9 T然后你需要设置/etd/httpd/conf/httpd.conf文件: 6 T9 R: i: K6 C/ ~- u0 W/ q ?8 F
<VirtualHost 192.168.0.2> " e% ~2 p) w0 G2 U
ServerAdmin webmaster@yourdomain.com
B2 a( P' k+ {2 |DocumentRoot /home/httpd/sales.yourdomain.com
9 j5 s$ ?2 J2 L; TServerName sales.yourdomain.com
6 o' I# t- k' qErrorLog /var/log/httpd/sales.yourdomain.com/error_log
8 Q4 N2 ~8 n2 g: GTransferLog /var/log/httpd/sales.yourdomain.com/access_log
6 N F" B7 K' u2 h# U% G* F</VirtualHost> 4 u" g- v; K/ T' s. o0 \
然后分别创建目录 7 o5 D& X6 A% ~0 y6 ~5 j
/home/httpd/sales.yourdomain.com,
0 j$ L5 N; }# d3 O$ N, r9 Z/var/log/httpd/sales.yourdomain.com
: |6 K& k/ I& v) [) @6 A7 {放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保 $ E* h) _: c" T0 @
你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
) \6 ?( r9 \5 F" l$ Z6 U1 |注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的 . S |6 ?7 e6 C" P5 c& ?
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
) D; y& B8 V8 d* T- z. ]0 q% b4 q方案。 8 X' w! ^' h: O% |; J3 |- ~
. F% a) p/ t6 {" y2 N
2.基于名字的虚拟主机:
) c7 ]9 A4 d% ?$ [" r. u: l 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 3 S! S3 i8 n* m
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 ; ?& L9 T1 {' p8 d1 f1 \) l0 z
/etc/httpd/conf/httpd.conf " ?) q+ D% L8 ?- X+ X6 K) {, \9 R
NameVirtualHost 192.168.0.1
9 R8 S V9 @* p( |: _$ r$ c<VirtualHost 192.168.0.1>
' Z" l) E: L6 y9 ?1 eServerAdmin webmaster@yourdomain.com
; y+ z F$ a2 k* I4 GDocumentRoot /home/httpd/sales.yourdomain.com
4 {: Z, @$ o+ p' eServerName sales.yourdomain.com ( n% E8 y4 I3 N; H
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
6 J8 v- t4 G' S0 @TransferLog /var/log/httpd/sales.yourdomain.com/access_log 9 q) |1 Y; _4 X* g& C
</VirtualHost> 6 T4 F5 E* }% P2 {
<VirtualHost 192.168.0.1>
- U# k. J; e* g- ~/ Q0 y E1 ^1 XServerAdmin webmaster@yourdomain.com ) E; C; j3 @0 p: T7 W
DocumentRoot /home/httpd/hr.yourdomain.com 6 h) q5 h4 t$ r5 f6 i# v
ServerName hr.yourdomain.com ! N) P5 y' O& D$ ?5 `6 Y0 e# ?' l
ErrorLog /var/log/httpd/hr.yourdomain.com/error_log 2 ~+ Z4 {% P" n3 z6 p7 z" s4 m& C6 n
TransferLog /var/log/hr.yourdomain.com/access_log / Q! ^3 j) F! |) J+ `2 n' y
</VirtualHost>
# o5 C' E5 S7 W+ d2 ~ }注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机,
9 O8 p6 O+ @( E为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS , `0 P# j7 y0 y5 q
都指向IP地址192.168.0.1 0 M# _# b8 h! C: z
上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能 . ^/ a, a5 y1 }" ]$ `( h
没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
4 [/ ^; ]4 H1 Z5 f( A$ p' k若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。
' V& e. V- t) }( N3 C3 V" t/ x提示:上面所提到的相对目录可以用绝对路径代替,如: , Y# h, `! ]' _! G8 P2 P
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot
& t; \8 S6 R+ p# f8 \8 q: }* F==================END=======================
# h- ~3 `0 j& _/ a7 g! B( t这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|