  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。
, I( _& j# @: c" ]( o# D% J# g: f) D7 g! j* G
一、安装PHP4
8 q2 V; a4 f% W我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip6 F7 t' Y0 u# ^# C. i! M
1.下载后,解压到c:\php目录下。
& _$ [3 X" B) a5 z7 M6 b2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
; ~' t& {! _( o# H! V3 C+ A; l3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。/ s: V+ a: Z: `# ]# N
3.1找到register_globals = Off 改为register_globals = On
3 v/ t: F$ i B; j L这一步是为了使部分旧的PHP程序能正常运行;* \3 _9 e5 ~% J/ E) j7 i9 ` T. h7 y8 r
3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions
/ t3 Z, `7 S6 f! x r" Z以下内容新手请略过
' {4 L: F+ W7 m5 b===============新手略过开开始================
- x% ^! B" `/ V刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) 5 g% t0 p [! S3 n2 e
;extension=php_bz2.dll6 z/ p1 w: q6 p$ C( i
;extension=php_cpdf.dll& Z8 i1 f+ s% s( z, ^- S* p
;extension=php_crack.dll3 L' ~* S/ u0 A
;extension=php_curl.dll8 t5 H% D% S; C) b
..... $ z4 G8 a+ W9 o: S
要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
/ ~. u$ S# N. t; q( m" Z其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;
6 N; J/ P, |- T( |7 H# R如下面
* p9 C. u3 W$ ^3 o2 d+ F# }) rextension=php_gd.dll: ^9 h9 v5 \9 L& `. G1 C; [
;extension=php_gd2.dll3 Z" z1 ]/ J) b5 H) A5 d
按实际所须的extension=php_xxxx.dll前面的分号都去掉。
3 }" O7 m( w! G0 m% t=============新手略过结束================! ]: L( O1 [; [' v5 \0 G7 N
3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp" J$ B0 v* y2 q" K% \' j9 l
并在C盘建立一个TMP目录
7 ~0 C: g4 ^& |' W6 p& V8 A+ H7 P9 {3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。6 F- \6 j5 t2 M: e4 t
================================================
5 V0 q! b1 t* [+ m% y) W5 N二、安装MySql+ f, U$ i7 G, e5 [2 b1 P# |4 I
安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;9 }. {$ E2 L: b; l
按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;
2 h! b, {6 q1 x8 e运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!)
. f* P C9 |; w3 i) j8 O从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口3 Q3 j1 M: T, [" S
即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;' y& |) g/ `' V; M9 l
当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;* V: ^2 g* O9 S% B7 ^( z6 F! {' e' X
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;, [4 r: q* `' B S7 [5 P
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)
; S$ H$ T0 x% Y2 A, W出现: 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/ x7 {4 O8 @6 Q即安装MySql成功。% s4 q6 O5 J, s
==========================================$ i4 d7 u% @5 C$ h+ H# \3 r/ }' w
三、安装Apache 1.3.x 及 PHP运行设置2 ^1 E6 {+ }: z! k* @6 i. C
1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。
, G8 f. y6 J/ b7 S0 ]8 k/ y& D如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。 / E, k. z# L, x( n$ ]4 y' k
有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。 % W. c0 ?1 c6 N1 ]/ d% j$ u( A
值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。 4 n8 I0 e" u1 M9 S
尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。 % I% B* h' [' D6 |; l, n P
如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装:
* K/ X/ U8 N1 }7 ~6 V& y$ A
2 q. Y$ o4 F9 u Q9 h* }ScriptAlias /php/ "c:/php/"
3 K M" f3 C4 W D# gAddType application/x-httpd-php .php .phtml
, L( n% E7 |8 G& VAction application/x-httpd-php "/php/php.exe"
- w) ~3 L7 `% m注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。
0 y+ J( o3 \4 [% r& N [( _) Y" b6 W5 Y2 i5 t
警告
- s5 ?* }& B+ j8 a% |% ~在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 0 g% [; y1 Q' J
: w& C2 @3 h$ A
如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行: 9 Z& E g+ Y2 [" s8 t# A5 _) F5 p, x! e
- q( k/ S( S. p' k用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,1 V0 h7 M" E r& ^' M3 q* o
对 PHP 4:
" v- m d; V1 {% [8 MLoadModule php4_module c:/php/sapi/php4apache.dll
; w5 t2 A! D8 [6 |- D+ H n7 a' p对 PHP 5:
$ N3 x$ \ z' l: e. sLoadModule php5_module "c:/php/sapi/php5apache.dll"! K3 G7 z0 b+ V* L7 U* u1 H+ @
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行: E3 p! h6 @6 p
AddModule mod_php4.c
' K# {- j# T- z3 a对于 PHP 5 则为:; k/ Q' R5 V6 K" Q
AddModule mod_php5.c
$ S( i- x3 H: y& ?搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
+ R6 Y" j ^+ t% V& A6 u& m2 j% D4 q b
修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。 " u- M5 E) m4 p0 a
有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。
; P( ]. x0 E4 D+ V8 p如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 . b7 ?4 c. R6 R" W
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。) K& j) K5 R% V |% G1 v( h
============================================
) o' X+ g T \- Z* _# k四、实现Apache虚拟主机的两种方案
7 Z2 V5 X' n: Z( ^& g简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序 1 G' p: {5 C) t7 N, S! e, x. M
支持多个Apache服务器,如在公司财务部门有一台web服务器,名为
& z. \8 a' w! Iaccount.yourdomain.com,同时又想为sales部门建立网站,网站内容也 , c/ w2 c( |/ T0 s. `2 J4 o! l
放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机 ' L- l$ {; ~4 B* C. W2 j& |
设置。
$ i( j6 Y4 i# p4 Z% d3 N2 c设置Apache虚拟主机通常有两种方案 ; u; F7 j+ m! x+ |( k' ^8 }
1.基于IP的虚拟主机
% E( h7 j+ c. x 这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
6 T; o; l; P( r+ L5 H( _网卡上绑定多个IP地址去服务多个虚拟主机。 & Y: @* k0 q3 W V8 j0 i0 Z
若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
1 Q4 T8 I( V# p你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
0 N! B& S1 O" S7 z0 A+ M- j6 P/etc/rc.d/rc.local,确保每次启动后自动运行。 ) U: M2 t) f8 i6 {- v4 G7 o$ E
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \
8 B6 y7 D( g1 R$ k @; @192.168.0.255 up
t# ]3 e. {! i3 y. q8 K8 Z! ~* q#/sbin/route add -host 192.168.0.2 eth0:0
+ }: j2 y3 n8 g9 R然后你需要设置/etd/httpd/conf/httpd.conf文件: 1 [0 j0 g* G& T3 [' R: X* q
<VirtualHost 192.168.0.2> 6 u% t8 ]' R# |; Y! P$ r
ServerAdmin webmaster@yourdomain.com % t6 `3 x3 ?- W6 v
DocumentRoot /home/httpd/sales.yourdomain.com " g6 A$ e) c( d% f( z% g
ServerName sales.yourdomain.com
- M& U( @" g, ^2 @0 N. UErrorLog /var/log/httpd/sales.yourdomain.com/error_log A1 Y9 I# e& ^
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
* Y5 F) I: M, o, d% A</VirtualHost> G1 ]( ~2 ]7 d% O# m/ J
然后分别创建目录
8 `5 E2 z' [9 d3 E8 z a/home/httpd/sales.yourdomain.com,
6 M2 y) j( p2 |1 M9 m/ C/var/log/httpd/sales.yourdomain.com
/ S3 Y; J$ P7 w/ z5 l8 f# N, A放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保 ' y. O+ Q6 m$ G% {
你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
# k2 ^4 N5 F/ R. x+ f* i% ~/ d注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的 # [) F: V& \0 [
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
$ [- R5 X+ S) g3 p- v方案。 & p: K2 @ k# g* L* E2 O
, ?" C8 w% M+ V
2.基于名字的虚拟主机:
. `# J! _$ J, B# @2 r0 E1 N 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 $ A# M- Y# G8 N+ f) v0 Q
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件
2 R. v: \2 f' W# a& G( {7 p/etc/httpd/conf/httpd.conf
2 k9 ]1 p. }6 S6 F9 ]2 C hNameVirtualHost 192.168.0.1 2 g* g5 e$ k. O
<VirtualHost 192.168.0.1>
?! x4 f9 s* J$ C* z2 gServerAdmin webmaster@yourdomain.com 6 D# d7 n3 K, C9 h1 e+ h% z; u
DocumentRoot /home/httpd/sales.yourdomain.com / G2 w, h: I( p
ServerName sales.yourdomain.com / Q' i. N9 u V7 K C
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
@+ X& M# U* Y+ X) Y! BTransferLog /var/log/httpd/sales.yourdomain.com/access_log
6 H7 X1 _# A. H</VirtualHost> 9 h. k) N$ Z+ L! p6 d% c& }# u( u
<VirtualHost 192.168.0.1>
) X, o$ O) i$ M8 z1 b- EServerAdmin webmaster@yourdomain.com
+ i! J' _' V2 q- WDocumentRoot /home/httpd/hr.yourdomain.com
: E K( C4 t& T0 r! lServerName hr.yourdomain.com
7 n/ n( [1 q$ X0 P, Y7 SErrorLog /var/log/httpd/hr.yourdomain.com/error_log 3 l/ d3 P# w; ?& i* Q6 t, n! L8 {# q
TransferLog /var/log/hr.yourdomain.com/access_log
8 d4 R k/ d/ h</VirtualHost> & F$ Y1 h$ [8 e c, L7 o/ O! `& T
注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机,
% b( q0 ?' d- I6 O4 W6 k: `- Z+ [为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS " E) I' l7 O" E- A
都指向IP地址192.168.0.1
& |- ^; L: X* ]7 @; n上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能 ' R8 u! O" O% E5 g5 o
没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案, 9 E7 |2 k' z8 h0 r, X3 V
若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 3 s+ ^! S- z: Z& f F0 X( q2 e
提示:上面所提到的相对目录可以用绝对路径代替,如: 0 m" `' \7 _) h" K
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot. [% O9 `$ f- l9 ?% U1 J2 z
==================END=======================
4 a2 v$ ~" m8 q. T5 R这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|