  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14197
- 金币
- 2389
- 威望
- 1647
- 贡献
- 1337
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。
# s' {* F# j! s" N2 ~* T% ?* X c4 q V9 `; I
一、安装PHP46 e. ^2 N$ E$ ]* k" n. P
我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip' f7 F- `9 z! Z5 Q d% a
1.下载后,解压到c:\php目录下。
; x5 u! R$ c5 N4 F2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。6 f4 L& x& e6 H: }/ h( G' `
3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。, z0 ^3 e6 I" L( s' L' O# R' W; \
3.1找到register_globals = Off 改为register_globals = On
. G+ F" }8 k/ @0 |- b9 f这一步是为了使部分旧的PHP程序能正常运行;
( ]& K1 A. k! q4 O9 Y+ w7 P3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions
8 f: s9 V7 S" M: K7 I0 P以下内容新手请略过
6 \4 m$ H# A) z% W===============新手略过开开始================( a% @7 K% M( {. Y
刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) . T9 K9 t) k8 u- Y, S: ^3 M! E
;extension=php_bz2.dll
- ~$ O* O# }0 X' H% [;extension=php_cpdf.dll
) ~0 J8 P7 z F4 A* P) J3 i; y;extension=php_crack.dll) J, Q2 r; g9 P) e0 ?" h+ Z
;extension=php_curl.dll" B/ D' g9 `5 x- n. x2 p
..... ( q6 |2 y" Q/ F/ L; E
要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;
' K |" r1 N( E! z! g其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;2 I" S+ o6 G" d
如下面
2 H3 y- l# C+ {2 h0 [) Wextension=php_gd.dll4 D0 C& S9 K( R) S7 l' X
;extension=php_gd2.dll# D E7 ]# y0 \0 u+ f; f
按实际所须的extension=php_xxxx.dll前面的分号都去掉。2 P' o- F! v# o
=============新手略过结束================9 b! X! U& F4 j* s, E. ^# t2 m
3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp+ s! X: r; e& T
并在C盘建立一个TMP目录1 }' i# [! f+ r7 N
3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。
' i1 h$ ]+ D3 h+ H! }================================================$ }0 r/ Y! D% _& X9 T$ |" t$ p
二、安装MySql
1 D2 A1 u# _7 X4 G- }* R! Z安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;
8 a8 e, W, _1 {. q5 g按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;
+ M3 {- ^0 |% t# U5 |运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!) % e% J1 j5 ] \; s3 `& z; @( |! }
从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口/ ~% I1 k; O% Z2 W
即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;
1 E$ Q" Y9 ?7 f7 h当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;4 i8 a8 D" B( m
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;. u2 I: _) J. c4 b: J& P. L* H
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)4 R3 I2 p, a9 i/ t; @( k1 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> ! K6 K+ u8 Q9 v# [' u' @6 j
即安装MySql成功。 T( ~! H* |7 _) p1 V# M/ X* F
==========================================
! D5 b0 j& h( o' p0 o- h u" S三、安装Apache 1.3.x 及 PHP运行设置
4 f& y$ m( d3 w" S1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。' i. _7 A9 f' y8 b- j
如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。 ! ^; ]: H- _6 l2 z4 L, x
有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
" j! D& z* {. @) z3 A值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。
+ s7 ~- u$ J7 t8 P5 j5 U尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。 % N8 m1 z% J7 n* q \5 M; z1 l9 Y3 g
如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装: , H+ n9 I6 B3 F+ L2 {
, G* I* \3 { W% A2 u
ScriptAlias /php/ "c:/php/"
5 U+ @. h$ d3 T# h2 S9 PAddType application/x-httpd-php .php .phtml + W( ?2 ^, [9 {" ?* Y- A
Action application/x-httpd-php "/php/php.exe" [9 J" ^ h$ n
注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。 1 u9 @+ `6 [1 `2 S
2 h9 @% A9 T5 z& L
警告
; e, Y3 U( G4 Q, [4 I, [在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 7 @) b* W, D. z! F
( V) Z) j6 ]1 q
如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行:
; f$ G$ I' [- i2 {2 `: Z/ j% ^; b( w! u& W: w' ^3 `0 ^8 p. n3 w
用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,. h% a0 g w6 }$ ?
对 PHP 4:- N9 A/ C! |' v' u+ Q$ S: W; a
LoadModule php4_module c:/php/sapi/php4apache.dll, W8 q. O N0 ?5 g7 }4 Z& @: o0 ?0 H
对 PHP 5:% `6 N a1 f4 W7 \
LoadModule php5_module "c:/php/sapi/php5apache.dll"# C4 ^& z8 P2 H' O$ z; [
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:
+ f! c8 ?7 d: a' N/ c8 MAddModule mod_php4.c4 i0 d7 F' P: S0 n; T% w5 G, m
对于 PHP 5 则为:5 l& L2 N) r9 d3 i. K( j7 A% c% M/ M8 Y
AddModule mod_php5.c9 {8 B g# Q! T
搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
9 j& w* I2 ~- @5 ]- X0 E7 E) i, v* [, g7 ]& I% b$ {+ }
修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。
+ m- o8 L- ]0 u5 E. M1 K有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。 & _- O6 [) I2 u* ?
如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。 # I& W1 n! v/ j3 C1 p
注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。
- [! d/ a. c' K============================================
: R# x9 E K0 p四、实现Apache虚拟主机的两种方案
. O4 T6 L- f( _简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序
4 Y; W9 V3 t- Y8 f( g5 Q支持多个Apache服务器,如在公司财务部门有一台web服务器,名为 # a( K5 _) g. a. X
account.yourdomain.com,同时又想为sales部门建立网站,网站内容也
$ Y4 r* i5 }9 o& n2 D5 j放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机 0 |. l1 q) s( \
设置。 2 n+ t0 p8 z! d# Z! s: P6 H
设置Apache虚拟主机通常有两种方案
# N( [6 w2 v8 N# C0 q4 q1.基于IP的虚拟主机 $ P7 M0 T* ~: S: n* i7 ]6 |
这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
# a+ e, s* T6 X网卡上绑定多个IP地址去服务多个虚拟主机。
& c( B5 R3 B9 N' e2 H6 W1 K2 {0 q若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
6 h" v* r5 v% @, _$ z8 I你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到 6 @0 }+ o8 Q7 N3 ]* b, _" ]
/etc/rc.d/rc.local,确保每次启动后自动运行。 , l: U, t8 {! `# k% i" w4 h
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \ 5 P* c7 @, @5 Z# `9 T" p
192.168.0.255 up 3 w% m6 M+ t1 f3 D/ I: u4 h
#/sbin/route add -host 192.168.0.2 eth0:0
9 `" p l3 L3 H% x$ Q$ W然后你需要设置/etd/httpd/conf/httpd.conf文件: ; n( j9 d; e1 D7 K& V
<VirtualHost 192.168.0.2>
2 E( b5 c. |. C# N% FServerAdmin webmaster@yourdomain.com 8 b" l9 p t$ Q7 j& J' i, y# G
DocumentRoot /home/httpd/sales.yourdomain.com
! q7 a W# A' u2 y3 d3 hServerName sales.yourdomain.com & b% ]; ^0 e# P
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log 6 c4 C! V/ ?8 M" S
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
5 X3 I& |# P" M; G! }</VirtualHost> - M$ `. X: d; M+ i0 |' {
然后分别创建目录 1 ?, v% M: B& l" j
/home/httpd/sales.yourdomain.com,
. V5 V( S" m1 d, Y; l# i/var/log/httpd/sales.yourdomain.com ; t* l. C$ H4 A# _& Y8 i
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保 9 L8 S1 A0 m% K7 V
你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。
1 @* H9 ~, d! v) i+ }# V9 b4 b注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的 ; L- u B; N0 _3 \ A
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
, h6 f: U+ ~( q- l方案。
* q" N( n& r; R6 t; p* N. \/ S! ^ r1 Z; n! \
2.基于名字的虚拟主机:
. l' x& O0 p. F( k 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的
( {0 h4 Z, l9 F# k2 L9 f" {' Y浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 # ~5 A; K; r( @1 \2 m( g
/etc/httpd/conf/httpd.conf
8 R" Y5 A6 N% p! I9 SNameVirtualHost 192.168.0.1 B' ^* x1 q( K+ J
<VirtualHost 192.168.0.1> * s, V' K8 A. o2 Q
ServerAdmin webmaster@yourdomain.com
1 Q- J: e# U$ y3 x' Z+ Q8 V7 XDocumentRoot /home/httpd/sales.yourdomain.com : ~+ x* g3 o" Q2 I' s7 j. K* f
ServerName sales.yourdomain.com 5 A( {. K, x0 `8 U2 m& @
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
. }! z1 \7 V0 R s! r, G* MTransferLog /var/log/httpd/sales.yourdomain.com/access_log
, ~. G1 l1 \6 q1 F: k</VirtualHost>
5 F! ?) J( j# O; ]3 G" i<VirtualHost 192.168.0.1>
- O9 ]4 g% N9 E8 [( PServerAdmin webmaster@yourdomain.com
4 `* s q3 i' D, [/ D! e( t: cDocumentRoot /home/httpd/hr.yourdomain.com ' ^. g" F) n7 s% x1 v) G
ServerName hr.yourdomain.com * ~. k6 X$ o! O; P
ErrorLog /var/log/httpd/hr.yourdomain.com/error_log
! O( l& G* @, p3 @, g9 r0 ?TransferLog /var/log/hr.yourdomain.com/access_log 8 U2 o+ }% O7 z0 g5 ?. I( X
</VirtualHost>
1 L+ W; T/ |3 n注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机, ; n0 n/ d f* j$ k
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS
. x$ e% @1 X3 M# c. o9 [7 M* I" i+ i都指向IP地址192.168.0.1
( T m8 A7 a7 r上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能 ) n8 b& X6 ]& J7 V/ V; V2 r
没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
1 W# K' X5 N4 |若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 ! C# R3 R3 j& b; i' v0 o- L
提示:上面所提到的相对目录可以用绝对路径代替,如: E4 S2 [0 P9 P
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot
1 n7 g* V* N$ y( y==================END=======================" h) W" i. E" Y+ O1 |
这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|