|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
Windows下的 Apache + PHP + MySql + 虚拟主机 设置全功略
前言:这一篇是我亲身配置的经历,希望大家喜欢,现在网络的教程中,PHP运行在Apache“模块”方式的文章中都少了最重要的一个步骤,也就是说按其方法配置PHP不能运行,有的太过简单,有的太过复杂,所以花了点时间整理一下。. Q/ R7 \! X0 B) c
& l9 `, I8 Z6 M8 ^8 _1 @
一、安装PHP4' b4 @5 [% o4 r8 x
我们需要安装的是win32版本,下载当然也是win32版本 php4.3.0-win32.zip
' [' i% L) Z: Q1.下载后,解压到c:\php目录下。- n0 _0 b( R" M
2. 把c:\php目录下的php4ts.dll php4ts.lib文件都拷贝到c:\winnt\system32目录下(即window 2000系统目录下的system32目录)。
$ `. s" V; ]& T6 b3. 修改php.ini文件,把c:\php目录下的php.ini-dist文件改名为php.ini 用记事本或其它可编辑文本的软件把它打开。) P: i, j& f: O5 W6 {9 t( z1 z
3.1找到register_globals = Off 改为register_globals = On# D( {7 ?" g0 ^0 D0 f. R9 ~6 Q
这一步是为了使部分旧的PHP程序能正常运行;
3 f4 l# P- k8 g& L- P6 m% t3.2找到 extension_dir = ./ 把它改为extension_dir = c:\php\extensions7 I: @+ |. Z7 h! L2 H
以下内容新手请略过+ e. o, n& I" t+ `$ p" @! @8 n
===============新手略过开开始================
, m0 r& m0 C1 b: O) j j: [5 W刚刚的修改是指定php4扩展dll文件存放的路径 由于php4默认所带的php.ini-dist中,是关掉了所有的扩展dll的功能( Windows Extensions) 8 n$ M% N1 e& d! y5 E1 `
;extension=php_bz2.dll* U, [( w7 u5 P* F- L
;extension=php_cpdf.dll3 S/ B$ G C' Y
;extension=php_crack.dll6 {& ~+ j0 ~$ n; R
;extension=php_curl.dll
* t- ?' \( |0 M/ [" N.....
& b1 l9 c( ^) H2 a要做的就是把extension前面的分号去掉就行了,当然这样是不够的。因为有些extension在我们的系统是不能使用的,比如系统中没有安装 sql server的话,那么extension=php_mssql.dll就要用;(分号)把它注释掉;9 m, L7 [8 v& W' s
其中,PHP4带了两个GD扩展,请选用一个,另一个先用分号注释掉,以免出现函数无法注册的错误;
, r) r$ l* M j, [. b3 X: X( l* A如下面
$ w0 ^ i" p0 H, p( Hextension=php_gd.dll, l: O D0 X! T8 ]3 Y% v
;extension=php_gd2.dll
! m0 g8 Q" Z2 m8 Z: e按实际所须的extension=php_xxxx.dll前面的分号都去掉。+ I0 S F) a* E; x" D6 X9 p: X# g
=============新手略过结束================( C9 m8 m% z7 v8 }
3.3 找到session.save_path,把这一项改为 session.save_path = c:\tmp
) l% o4 `& I3 Z, V1 |4 P并在C盘建立一个TMP目录+ f& J& d, V! z: q
3.4记得要保存刚刚的修改 并把php.ini文件放置在c:\winnt目录下。
' J! q5 q4 q2 u5 R5 Z1 X9 I================================================4 }/ e) |9 h- E% B4 C4 r2 `
二、安装MySql
% f) W! R+ k+ r Y' R" t' R安装MySql 当然,我在MySql.com 下载的MySql是一个压缩包,要先解压出来;再点setup.exe安装;+ e1 X$ [2 Q" u0 A
按默认安装,即安装在c:\MySql下,安装完后,按“开始”菜单中的“运行”打进cmd进入dos窗口,进到c:\MySql\bin 目录;
) P' W3 N$ g1 k0 N运行mysqld-nt --install (将会出现一个Dos窗口,随即自动关闭!如果没有出任何信息,即安装到service成功!)
2 [) _* I7 K3 e) J" k: p% h& f从“开始”菜单“程序”=》“管理工具”=》“服务”,打开后,将会找到MySql,点击mouse右键 选择启动 回到刚刚的Dos窗口5 `! Q2 L4 ^$ w. K
即c:\MySql\bin目录下 运行mysqladmin -u root password 123 即把root用户的密码设置为123 这一步,如果没有出错,说明初始化root密码成功;+ [) k6 b# {0 H x2 `
当然从本机进入MySql是不需要用户名和密码,但用php 程序或是其它程序连接MySql时就要用到;# g& w9 n. J/ e8 c
测试进入 第一种方法:直接动行MySql进入MySql 的dos管理状态;) D8 x* O' k; F+ y2 @8 A
第二种方法:运行MySql -uroot -p MySql将会提示让您输入密码,密码当然就是刚刚设置的123(当然,得按设置的密码喽,不一定得设置是123)
; o o1 d: B& h. q" M出现: 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 p# Q$ y+ m+ ]+ o/ e4 r
即安装MySql成功。" a7 G/ C+ {0 L: [
==========================================
$ \& E/ K6 v' r! s三、安装Apache 1.3.x 及 PHP运行设置( w( B1 t+ i% [7 x s7 C8 s( `
1.首先下载Apache,Apache软件一般叫作apache_1_3_x.win32.exe。运行它。它会问你将Apache安装到什么地方,为他系统安全及操作容易,我们不要使用默认路径,你可以设为c:\Apache或C:\,因为马上你就要修改它的配置文件。4 J3 b& e3 T/ a2 j
如果安装没出什么错的话,Apache就可以用了。有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。 ' S6 s8 b0 a; Q+ }" b' S" G9 j
有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。
$ b3 h" ]0 s: A; v0 K; e: @3 p+ S值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。 8 Y4 k- {3 `0 \8 f7 M' y
尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。
4 P" A: {+ O- t0 `* A如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装:
5 {5 Y/ W4 b. x7 z
& |( r8 [5 K2 ?- P4 j$ T% _+ [ScriptAlias /php/ "c:/php/"
& ^: p# v8 ]) ~AddType application/x-httpd-php .php .phtml $ f$ t$ H- ~5 w' N6 A# _2 G
Action application/x-httpd-php "/php/php.exe"
$ D" ?1 c3 ^* d% z, v! ~' ]. Q注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/。 : Q% V, Q0 J& k9 ?" C6 m
1 F+ {1 {& }. p0 \' C' w5 W: M: c% @: f警告
7 g$ S! O2 {% |; c在 CGI 方式下,你的服务器可能会受到几种攻击的影响。请学习如何防止攻击。 9 ^0 s; q0 X/ C+ I6 F% ?
% O( x2 M4 K$ q ~
如果你想在 Apache 中用模块方式使用 PHP,确认把 php4ts.dll 拷贝到 windows/system(Windows 9x/Me)或者 winnt/system32(Windows NT/2000)或者 windows/system32(Windows XP)目录下,覆盖原来的文件。然后在 Apache 配置文件 httpd.conf 中加入以下两行: * b( J, C7 Z: M# X
' u, P9 Y2 l7 V/ V& y+ A用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,- U# `5 n1 I" n9 ^8 D, j
对 PHP 4:
' D: x+ N: a9 k. H3 Z3 e2 zLoadModule php4_module c:/php/sapi/php4apache.dll- s$ g4 a/ m k! Q5 m' p/ T" V E
对 PHP 5:
: h, p! U+ j7 k: g) b3 g8 KLoadModule php5_module "c:/php/sapi/php5apache.dll"/ F' {& I/ J3 U7 ~. ~# T4 M$ m2 U3 U
你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:
5 R! f! k- J {. a1 JAddModule mod_php4.c
: G! b% N q+ I( ~6 ~( j对于 PHP 5 则为:
0 X) l' l. H' U) [% fAddModule mod_php5.c
( D2 a& m4 ^7 h; l# N搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。
5 z5 W- \8 ^4 W' Z9 H& c0 @$ q& _0 n" [, u7 a
修改了配置文件之后记住重新启动 Apache,例如如果你的 Apache 是作为 Windows 的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。
. ~7 g3 u9 a7 K; h有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了 Apache 的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。 6 X" l* |' Z- u4 g8 D% m, \6 Y
如果你用 CGI 方式使用 PHP,那你需要用 show_source() 函数。建立一个 PHP 文件,加入以下代码:<?php show_source ("original_php_script.php"); ?>。用你想要显示源代码的文件名替换掉 original_php_script.php。
}( @+ `7 T' I# p5 L: z1 v注: 在 Windows-Apache 组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。
8 [3 y! U4 j2 l2 H0 x============================================1 W2 ^' S& w$ l' n( K( O/ E
四、实现Apache虚拟主机的两种方案
( {3 `4 I+ N {. @简介:这里说的虚拟主机是指在一台机器上仅运行一个httpd后台程序 $ k3 z# L+ |8 [; h1 d( `6 ?; U
支持多个Apache服务器,如在公司财务部门有一台web服务器,名为
& x i1 Y. P# Y) b# |6 Vaccount.yourdomain.com,同时又想为sales部门建立网站,网站内容也
6 ?: l( f$ a# U: C m8 H E放在该机器上,通过sales.yourdomain.com访问,这就要用到虚拟主机
2 v& |6 I' d+ r% P6 r设置。
8 T1 I& Y- `; o& {设置Apache虚拟主机通常有两种方案 5 ~. Y, ?6 \5 g. D, c: T6 ?/ ]
1.基于IP的虚拟主机
; q0 b" c$ f7 B! {3 K 这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
- S4 L# \. j; \! E* H网卡上绑定多个IP地址去服务多个虚拟主机。 + A8 M X% p9 s2 K" M( m) M9 ?
若该机器的IP地址为192.168.0.1(account.yourdomain.com),首先
! S, [# N* ^ T你要设置IP别名(假设用192.168.0.2作为其别名IP)。加下面的行到
8 N' [4 i V6 n" @/etc/rc.d/rc.local,确保每次启动后自动运行。 . b" J5 z: d( u- F" j
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast \ + O! U4 O8 G( p+ g) k' a
192.168.0.255 up
5 [) r: I' b- S3 j- v#/sbin/route add -host 192.168.0.2 eth0:0 + Y7 O0 n `, ~6 f
然后你需要设置/etd/httpd/conf/httpd.conf文件:
4 z% N2 M! L" {1 C2 G<VirtualHost 192.168.0.2>
. B8 @; l5 \1 p6 ?& PServerAdmin webmaster@yourdomain.com
! x$ K; L! ?% |" ~4 K: U8 BDocumentRoot /home/httpd/sales.yourdomain.com
6 `/ ]% j# Z Z4 GServerName sales.yourdomain.com % \' B% e8 K! j$ l) P3 t- ^& f4 C
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
. E& o/ i7 M5 LTransferLog /var/log/httpd/sales.yourdomain.com/access_log
2 g V5 J8 d0 A( x+ U1 g8 Y</VirtualHost>
" S# Q" ^; u0 r7 `然后分别创建目录
1 F f& C( g+ D, c/home/httpd/sales.yourdomain.com,
9 i8 k# ?2 G- V. I/var/log/httpd/sales.yourdomain.com , `& V0 D: e/ s& s
放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
) b3 r! r& R2 ?2 W% l你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.0.2 。 8 n" }7 T5 g; `6 F) b
注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的 3 B" k3 T5 G6 q6 E" ]/ z: b
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
: y% I- W& v/ I2 }% K9 W方案。
|. J3 z2 @7 e* F& d$ c. Y8 q$ v4 P
( z; _: x+ t: a+ }8 Y2.基于名字的虚拟主机:
/ o5 Q+ F& B8 |4 @' R8 g Z0 f 它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的 6 ], K& X: ^" w/ E/ ~& ]$ K
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件 / z$ T2 c3 g3 [
/etc/httpd/conf/httpd.conf & N+ v2 z6 ?+ k( A6 L
NameVirtualHost 192.168.0.1
# T6 H0 y7 N& Q8 R5 |0 a<VirtualHost 192.168.0.1> : K* Q, x& k0 z' @ i, e; E& K
ServerAdmin webmaster@yourdomain.com ( z# \% Z3 D# ?- A& E
DocumentRoot /home/httpd/sales.yourdomain.com ; l( }) S. O( O
ServerName sales.yourdomain.com
; c( l5 {/ f8 a4 n( EErrorLog /var/log/httpd/sales.yourdomain.com/error_log
7 L: S3 `4 M/ @# W VTransferLog /var/log/httpd/sales.yourdomain.com/access_log
( U V3 d3 l+ V3 y! N</VirtualHost>
4 `8 T @9 ?/ M8 a1 Z {<VirtualHost 192.168.0.1> # V/ C K( Q3 y5 i: [0 Q3 Y7 u, n5 n
ServerAdmin webmaster@yourdomain.com
8 j' U" T/ E9 s; q0 q/ _ WDocumentRoot /home/httpd/hr.yourdomain.com . W7 ~9 Y+ Z, C/ D( z
ServerName hr.yourdomain.com
5 `% C9 R% S2 ^" a, a& W% b8 aErrorLog /var/log/httpd/hr.yourdomain.com/error_log
6 X( A* n9 G# `, R' ]6 KTransferLog /var/log/hr.yourdomain.com/access_log
& {, e/ }) i. q6 a</VirtualHost>
( B8 q0 v0 ? F. Q/ e- ]注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机, " T9 w# F O8 n8 l: o) k' I' U
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS
. `0 M6 s. w# o: J都指向IP地址192.168.0.1 ! g9 z9 ^ F- g
上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
& p8 p5 e. j2 T h: z没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
, [6 l) I; ]+ h7 q& {; L$ ^- ?若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。 1 ~9 W {# F# A5 D: E7 c
提示:上面所提到的相对目录可以用绝对路径代替,如: 0 d4 P' U5 Y( o% e! x8 Y
/home/httpd/hr.yourdomain.com 可改为 D:/Inetpub/wwwroot* ]3 g; l7 Y: W1 [( S9 ^% y
==================END=======================
% d! X" n; U- P4 F这只是入门,只能保证你的WEB服务器能正常运,要了解更多的 PHP 及 Apache 的详细设置,还要靠大家更加深入的实践... |
|