|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。
. }9 h9 ^& b' R u, @/ p5 L0 o2 X* ?% H5 }
一、安装PHP4
% e9 p; g- Y, |. U+ ?' t. @6 N我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip
1 n5 n, P% F% U- Z8 [, B1.下载后,解压到c:\php目录下。# H. I) x4 r) W( X* E2 ^
2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
& J3 W U3 n0 c3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。
& i) T! _8 ]9 U, B: o5 P" M- L5 N& G3.1找到register_globals = Off 改为register_globals = On
7 P3 W4 Z* U& C) B% E, R这一步是为了使部分旧的PHP程序能正常运行;
' z& [' d) e* V9 b$ B) Y9 T9 ?7 ^% l9 j9 x3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions# M ^; S3 f4 y
以下内容新手请略过3 x7 n8 M7 g0 ~5 G$ \
===============新手略过开开始================
3 |; k! y# b/ R/ `; r刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) 5 |* j, j8 E) g2 I$ n V- U
;extension=php_bz2.dll
& U# n+ c& k2 x4 [;extension=php_cpdf.dll- [5 ?* D1 l2 I( ? O w* l" e
;extension=php_crack.dll
0 V. e' v0 i" N9 ?- n8 k) |4 \1 U;extension=php_curl.dll1 o2 N2 M+ ~' B/ h- s1 b2 `: a- B
..... 2 M$ j! z* E6 O; Z' U6 U9 X
要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
, \6 S7 Q% C7 r# q其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;6 E" N) ]% s& j" I0 Y
如下面
8 n Y3 x' h" L9 X! Rextension=php_gd.dll
5 D3 X0 `+ K# f( Y: P. d; q9 `;extension=php_gd2.dll
, Z! I* b q, ^2 s按实际所须的extension=php_xxxx.dll前面的分号都去掉。
" m0 I2 l3 l# U' m- L=============新手略过结束================3 e, i X1 Y( F: _! n- a
3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp
4 w8 c0 E7 k4 Y并在C盘建立一个TMP目录
0 J& y& |% P: ?. \0 c! w5 l3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。9 O0 s! b( {+ |& O, p v
================================================$ t! }5 B7 L% r% W, ^* | o) L
二、安装MySql
' Z3 G7 b+ S$ R4 K* v- K" Y安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
. n% k3 s2 F6 p6 O/ P按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;
* J* ]' L, z5 H0 c0 O运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) ) U- M$ J& T* ?! {' N4 H. W
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口
+ q" ^8 S5 E! F* }- u' v' F2 |即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;# Z- ?* [; s+ Q1 X1 Z
当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;
7 _! [6 R: u) m- g1 i7 D测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;, z- Y* L) C, m
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)" h& h+ _3 ^, ^% N1 a* s) W* y
出现: 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 w# a F4 J4 J即安装MySql成功。
& U( H% {3 C/ _==========================================% k: ~4 l/ R" `
三、安装Apache 1.3.x 及 PHP运行设置" u- u* @# p0 ~" Z( i# w G
1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。
/ ]. X F" G7 [ s4 ?如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
c. o, F+ O: v& D3 u; p: v% J有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。 & G% L% ?9 b; a; N
值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。
% U4 O) i+ {% t( E" s尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。 ; P: g$ {, d/ f. y
如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装:
" \6 Q F! `0 K' P; T
* J! w6 y. @. |. c1 k/ z' V* T% K' nScriptAlias /php/ "c:/php/"
; L4 m' u$ a$ j0 yAddType application/x-httpd-php .php .phtml
' J4 W% b9 @/ `& @: {' s, ZAction application/x-httpd-php "/php/php.exe"
% A3 w: M6 p2 ] n( ]( F' E注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。
+ X) s, k7 ^: O5 X+ C, X, Y; l
4 u" e$ g; o) y. P7 p& X警告
# @- y! g8 i0 I* v在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。
) \$ k* M0 Y+ X( t/ M, V3 {
B0 p* v& w9 m! n I如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行:
6 G K5 J* d6 P/ J7 _; P S' d7 I
' L/ z4 n6 Z) i& N7 g8 i用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,% s) e5 w; u8 R6 |
对 PHP 4:% V7 P3 w5 p' X" l6 i
LoadModule php4_module c:/php/sapi/php4apache.dll( f( p6 T( B i1 \6 o" n Z [
对 PHP 5:2 m$ ]$ K! L0 H
LoadModule php5_module "c:/php/sapi/php5apache.dll"
7 _$ H9 B( v9 a" h3 R# c p. N你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:# I3 T" s7 e6 E( o' F+ \9 c
AddModule mod_php4.c
0 Z, ~9 Q2 F3 @9 z: b7 d对于 PHP 5 则为:
& k' z4 J/ i- B# B: R5 AAddModule mod_php5.c
2 E% O8 Q( [# T3 y. S1 z9 z搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
+ a& b" F! d5 D0 S2 L8 h. L- `0 i6 b+ u
修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。 : [& C7 U- x1 \6 |7 }
有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。 + C, L T1 z( U, B( O
如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。
" {+ B' r# s/ G$ h注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。) \* L3 v" H0 b1 Q! B
============================================ _7 N' `. |) T- \; J" o! Y
四、实现Apache虚拟主机的两种方案
0 B% I5 t( F3 J' u2 O9 E3 R, a简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序 - a/ @! _. r% d' @( ^+ b
支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 0 F: o: |; @ K W$ n" M
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也 + a% p# ]8 y, x9 w. \( Z. ?/ ?
放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机
: f. G* p) b# L d, R设置。 - @6 r; V3 h# g5 g2 l' e
设置Apache虚拟主机通常有两种方案
_8 l2 N" O3 f1.基于IP的虚拟主机 ( j/ D3 j$ w; F( h2 a
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的 8 s! R$ G9 B/ y6 a9 N0 t# x) q; ]
网卡上绑定多个IP地址去服务多个虚拟主机。
- h$ x. u9 H/ |: A6 I若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先 * n7 a# I6 r( ]" f5 J
你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
; G: R0 A: H& M/etc/rc.d/rc.local,确保每次启动后自动运行。 - h& b4 U6 N- A% r1 f
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \ ( s, [. A+ h" n, n- E, O& T
192.168.0.255 up 8 j+ Y4 \( h) O
#/sbin/route add -host 192.168.0.2 eth0:0
! a% B1 H" [1 J( V* P然后你需要设置/etd/httpd/conf/httpd.conf文件:
' P6 R- k2 e, J' z& u- x: y7 c: @<VirtualHost 192.168.0.2>
- F& [6 q- V6 w* [6 |# L" b1 O aServerAdmin webmaster@yourdomain.com + V' Z7 [$ A' y F( E1 D
DocumentRoot /home/httpd/sales.yourdomain.com 6 @( q7 C. |; `' W0 d0 m
ServerName sales.yourdomain.com ( P- W) y' v" z$ J2 w0 m( R
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
4 T7 M; d' ], v" _TransferLog /var/log/httpd/sales.yourdomain.com/access_log
, v2 W) A j: `4 O, j0 Q5 L</VirtualHost> . S3 @+ y* o$ ]- T1 V3 @9 y
然后分别创建目录 " t: K. O0 G0 F* y
/home/httpd/sales.yourdomain.com, 4 @9 ?) U1 e1 h2 ^6 I. M6 Q
/var/log/httpd/sales.yourdomain.com ' X; m3 t0 t& R5 w1 |
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
9 t/ H3 V' O& K& Y1 d z2 J% I你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
% A1 P5 x) R$ P1 ]; Z9 V注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的 2 [5 Y- c$ s3 {0 y/ H# Y
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
( @' c' V' d& W- v; Y4 y8 W4 a方案。
2 s+ V+ g9 }: C j7 V, D( i. q
0 Y2 m v. `) ]; q! F$ ^1 ^2.基于名字的虚拟主机: # D( R) I; K k2 e2 ?
它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 8 g4 p$ t4 u8 y0 j
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 / R& m7 e' p4 g% Z0 I, n7 o
/etc/httpd/conf/httpd.conf
: U- C8 W4 ^) sNameVirtualHost 192.168.0.1
7 L8 S! o3 o/ J6 i5 L8 a<VirtualHost 192.168.0.1> 7 B# l6 H* E% y0 R, x @7 _
ServerAdmin webmaster@yourdomain.com , j9 Y2 q, V! d! D' H& E
DocumentRoot /home/httpd/sales.yourdomain.com ) b4 v/ i \( n
ServerName sales.yourdomain.com % y$ d7 @) P$ X+ s3 Q
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log / G) J+ H( ?3 X7 L* d
TransferLog /var/log/httpd/sales.yourdomain.com/access_log . i+ X& ^ [( C2 n
</VirtualHost> + Z4 t: f% Q2 q4 t, x; h+ t
<VirtualHost 192.168.0.1>
: l, X5 I+ b+ y0 Z" RServerAdmin webmaster@yourdomain.com
: z. ~5 [' Y9 }$ e9 KDocumentRoot /home/httpd/hr.yourdomain.com 6 C2 B0 P4 r- i- G9 d8 B
ServerName hr.yourdomain.com 6 G3 z& w/ A6 n, z+ ~. {6 q! C
ErrorLog /var/log/httpd/hr.yourdomain.com/error_log 6 I# N1 i% c- }- ~
TransferLog /var/log/hr.yourdomain.com/access_log
8 e/ r9 u0 i8 B; K5 ~0 s- s</VirtualHost>
$ O; ?8 H" L2 W2 f3 C6 B- d注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机, 8 r* a, G1 i# H0 k1 q
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS
! x7 T& {( `' ?" L都指向IP地址192.168.0.1 5 B @) U0 G3 F3 e
上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能 ! l o! f3 q9 v- n$ o
没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
. I$ R, E6 w& ~若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。
0 o) p6 h7 r* _; q( Z提示:上面所提到的相对目录可以用绝对路径代替,如: 8 j$ C$ V3 v3 ~. z- L- a6 a
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot- ~, M; t; D6 B/ n
==================END=======================
* h) h( t5 z* d7 r3 |& L: Q这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|