  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。 R: w. u( A: U. ]* w1 \6 P& `
/ s$ Z2 E+ j* t" V一、安装PHP4; U& X# O/ T0 y! O7 Q7 S. T) ?
我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip
" [! J% A# D1 C( I$ x& a, D, w( p1.下载后,解压到c:\php目录下。
5 I8 G. T2 @( |$ u& I/ D- x2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。, ?! J2 e) @7 y
3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。
' R0 @/ Z8 f! _9 m& Z3.1找到register_globals = Off 改为register_globals = On7 l1 P5 _! b+ r# K* h
这一步是为了使部分旧的PHP程序能正常运行;
) H1 C& v# m5 p/ N7 p3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions/ e6 j) I8 A" Y
以下内容新手请略过 y$ s0 S' n% Z, a' T( j7 F
===============新手略过开开始================+ e6 ^: T8 ^# g6 s
刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions)
- G; G% a: s6 Q0 U# g- \- {;extension=php_bz2.dll7 P) k# @% ?. @
;extension=php_cpdf.dll
( h @( p/ L2 m' i;extension=php_crack.dll( ?8 N# k8 H1 P, M: Z
;extension=php_curl.dll
7 @. l @7 L" L9 k/ V. p# W..... ( `* p% O2 g% y6 t
要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
5 q" p2 v+ T" P9 m4 r7 A8 A其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;' y, I3 `# Y9 e. C0 \
如下面
, Z" \" i o: {- D, y8 O! T7 i6 w6 cextension=php_gd.dll2 c0 f- s) A8 l* g3 z+ B' K% w
;extension=php_gd2.dll
. i5 ] h7 L& D7 i e按实际所须的extension=php_xxxx.dll前面的分号都去掉。) [5 r3 a1 U' w i/ \1 p
=============新手略过结束================7 m5 {0 [, m: {. M* d1 S
3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp# [9 ^/ d! a$ k2 E, s( ^5 ~
并在C盘建立一个TMP目录( K7 Z* I. w- }7 W" g' @
3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。" A5 z! w( l$ x5 N' H
================================================
' G( B) S8 `! }' A ]4 w二、安装MySql. d/ F) f5 Y2 I! c3 d
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
4 P( ~$ E& r! X6 J按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;" {& H" p) @# A
运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) ; H0 t9 S0 F/ w: G8 H4 T
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口2 a) Y: b$ q- k3 Q: t% D* y! C
即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;
4 K1 o R$ ~( k当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;/ Z% E& l5 i+ p; ~1 @% D- h* {
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;
! j/ j: S4 Y: _! S" w% y& w第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)
( ?; X! I/ X9 e6 K. o出现: 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>
" t" k0 o. V0 S) f" r即安装MySql成功。) ^: X2 _3 L( j0 ~+ Y% t; a$ b
==========================================
7 C9 Q+ @4 N( |" N& U/ `三、安装Apache 1.3.x 及 PHP运行设置* Z/ D, A( u7 Q: P+ X9 [4 n) D- P
1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。4 v" W2 C- \" p: s& p9 e4 p
如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
; I" d( y& T8 M2 V3 U$ X% ~! Y0 G有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
5 Z, i* r8 S) o+ Z值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。 d- H+ `* b- p, M8 B# x9 K
尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。
5 }9 W9 e" S' ?如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装: ) E" x' p$ R+ ]) Z5 H/ @; C7 H4 d
. h- j; G/ D& r) ^( C
ScriptAlias /php/ "c:/php/"
5 d( I! N/ Z0 k" _" I1 M2 wAddType application/x-httpd-php .php .phtml
* {4 W H) }8 I4 i+ I% `$ sAction application/x-httpd-php "/php/php.exe" 1 R( n% k0 F0 p+ I F
注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。
& D0 t: {5 B* \: U7 o2 o _$ k) R1 c# w. ?6 V
警告
( r# S* T' ~3 [% z- Q# y2 z在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。
5 m. W: b" R: o) z
5 _0 s# m- k0 t6 g/ e如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行:
, h' A5 Q2 }' J# n4 w, {
0 w' t/ x1 y' q" M' D1 \用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行, v1 N7 u% B; P, Q: R+ V- q
对 PHP 4:2 p: g# W- Z0 B, t/ v( y) T
LoadModule php4_module c:/php/sapi/php4apache.dll
5 O5 E3 X1 _5 V6 B7 N对 PHP 5:1 ?8 E! ~1 [* [$ M! C, W
LoadModule php5_module "c:/php/sapi/php5apache.dll"; ?! d* v6 N9 c: G+ _# A, q5 L
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:
) p2 t9 {$ g& o( l/ B+ dAddModule mod_php4.c
6 @, m) i9 P; {3 I0 X对于 PHP 5 则为:
' A$ K0 b- J# x/ _( XAddModule mod_php5.c$ ?; p/ J5 O& `1 Z: m/ Z! j
搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
8 i, j; u1 x6 K- C' N
: B& A6 d$ V2 }) |; j; l. g修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。 0 h1 S" s# C& s+ X i- k/ q% r# q3 t
有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。
$ K3 f' z" C- N. b+ P4 C! u& j如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 + H2 r: f' k* E- E! M) k3 F7 R6 J" Z
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。8 |' c7 T2 U. `% |" d, L- G3 x
============================================
1 ?3 @( ]2 d8 F1 y$ U1 b2 e四、实现Apache虚拟主机的两种方案
$ b0 \5 ^6 Q5 D8 l简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序
) V N0 E" l' i9 s支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 : d2 ?+ i7 a. Q' X8 r# C+ m4 W+ C$ {
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也
9 m* N0 j1 Q3 v+ D6 E8 a放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机 % Z" _9 I# P# Q/ Q
设置。
. v/ b: t1 m# S' L; M设置Apache虚拟主机通常有两种方案
& C' N' R9 X3 b1.基于IP的虚拟主机
; k9 w6 W9 ^& y7 P- d# I2 o 这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
- s. \ s/ l. z+ s4 U$ Y+ Z' C! m网卡上绑定多个IP地址去服务多个虚拟主机。
' X& N: b) Y6 h1 K; |若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先 6 Q- j( c" ~7 W* D0 Z' s* F, j, v
你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
- r0 B0 [, d) R/etc/rc.d/rc.local,确保每次启动后自动运行。 * d+ Z$ X" h; e
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \ + r' B/ u" r6 |" w2 h2 W
192.168.0.255 up
1 d: R" Z, r' w4 J/ G#/sbin/route add -host 192.168.0.2 eth0:0 # j) U1 j' l8 G, u: n" D
然后你需要设置/etd/httpd/conf/httpd.conf文件:
& q2 V4 ^! _; I( a" K' H<VirtualHost 192.168.0.2> 5 e5 L) b( W {! X, O" n
ServerAdmin webmaster@yourdomain.com 7 w0 f# Z* j, {! S# N6 R
DocumentRoot /home/httpd/sales.yourdomain.com " ^5 t) q" p0 y8 H+ Q" }! }8 Y
ServerName sales.yourdomain.com
) D, ^+ r. x6 }5 K6 {: e# z7 ^ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
; d7 A/ y0 M3 e5 L% q, |TransferLog /var/log/httpd/sales.yourdomain.com/access_log ; O# T& d" v7 a2 b, r
</VirtualHost> ^3 Q* W0 M1 }
然后分别创建目录 ( [: p1 a: h& x5 ]$ v
/home/httpd/sales.yourdomain.com,
# S/ U- V2 F! G4 T# W5 `/var/log/httpd/sales.yourdomain.com ?( l; Y/ D( G ^
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保 ' u$ u$ t7 E- v7 Z) E3 h% O$ J
你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
) W E; x- q% O8 N; ^9 g0 I注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的
9 s o& }) d* R% I虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机 6 X: Y+ r* ?* S- `/ _% Y
方案。 0 {0 p v/ @4 n0 ~; b
; r8 p# [! r- f1 \; ?" Q
2.基于名字的虚拟主机:
1 f* g. f" R4 h0 F 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 8 @& e& z8 z2 B
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件
, Q7 d7 t# S' D: e$ ~- I q/etc/httpd/conf/httpd.conf # W3 Z/ c( F; ?1 m5 o) @( G
NameVirtualHost 192.168.0.1
$ b9 z# x2 B) i# i g+ j<VirtualHost 192.168.0.1>
3 H: u0 a& ~, ]0 Z1 |* Z6 SServerAdmin webmaster@yourdomain.com 0 B: s/ w7 H0 W( E7 m) e
DocumentRoot /home/httpd/sales.yourdomain.com ) L5 D2 Y& l* [
ServerName sales.yourdomain.com
% t) G/ |+ j! ?/ lErrorLog /var/log/httpd/sales.yourdomain.com/error_log 2 d9 Z2 B7 k3 O
TransferLog /var/log/httpd/sales.yourdomain.com/access_log , u' X" e7 ?( u$ E8 n: P/ |
</VirtualHost>
* x2 }+ w) w+ z! s<VirtualHost 192.168.0.1>
* V9 L3 M5 Y" o4 l9 v: |- j+ HServerAdmin webmaster@yourdomain.com 1 r P* t& Q: m) _- N, H
DocumentRoot /home/httpd/hr.yourdomain.com ; e: T H o. x) O1 y0 b. [
ServerName hr.yourdomain.com
# r3 w o+ @0 m [ErrorLog /var/log/httpd/hr.yourdomain.com/error_log
8 g5 C8 E t( R9 a+ S- NTransferLog /var/log/hr.yourdomain.com/access_log - ]. ]" ^+ \8 G; I5 Y
</VirtualHost>
! k3 N+ `, j, w# Z: F注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机,
* G9 h7 z( o4 A* u为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS
: V/ ?5 z/ U$ @ a' A: h都指向IP地址192.168.0.1
7 C$ ? {" c \) k: p上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
" ?% ~8 I3 W' Q% ~ q" N没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案, " y9 b- K. [4 [9 O5 M) G& c
若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 ( N) I; I" T/ Y
提示:上面所提到的相对目录可以用绝对路径代替,如:
. }# e8 @# F6 |* I5 t/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot
; w, Z, ]9 t3 Z1 N==================END=======================
' E( \: c* i; k; r4 z' d这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|