Apache2与Php5的组合
一.Apache与PHP的简单安装
Apache:
(1).从http://www.apache.org/ 下载源码文件,我下载的是httpd-2.2.22.tar.gz
(2).在安装apache之前最好先检查一下是否已经安装了Apache,如果已经安装,应该卸载较低版本的Apache,然后再安装。
注1:检查是否有低版本的apache往往会通过rpm –qa | grep –i httpd,卸载也很简单rpm –e httpd。但是对于不是通过rpm方式安装的apache又该怎么检查,如何去卸载呢? 这里也有两种参考方法,一个是在进入软件解压之后的目录执行./configure之后,执行命令make uninstall。如果第一种方法行不通,比如出现“没有规则可以创建目标uninstall”这样的提示。那么试一下查看解压后的目录中软件安装说明,比如很多软件都有README这个文件,里面可能会有这个软件的特定卸载方式。照着做就行了!
注2:强烈建议采用源码包安装,方便自己定义和配置。另外选择Apache版本的时候得考虑到与后面要安装的Php的兼容性,例如php5安装环境需要apache2.0.46以上版本,这个在下载的时候就要注意一下。
(3). # ./configure --prefix=/usr/local/apache2 --enable-module=so
(4). make && make install
注1:如果希望apache开机自启动的话,可以通过以下命令在/etc/rc.d/rc.local加入自启动命令:echo "service httpd start">>/etc/rc.d/rc.local
PHP:
可以从http://www.php.net/downloads.php处下载源码包,我下载的是php-5.3.8.tar.gz。安装php,需要以下软件包的支持:
安装GD2(gd-2.0.35.tar.gz)需要如下软件安装包:
zlib(zlib-1.2.5.tar.gz)
libpng(libpng-1.2.10.tar.bz2)
freetype(freetype-2.3.7.tar.bz2)
cur(curl-7.21.3.tar.gz)
gettext(gettext-0.17.tar.gz)
依次安装:
1.解压安装包: tar –xzvf xxx.tar.gz 或tar -xjvf xxx.tar.bz2
2.进入解压目录: cd xxx/
3.定义安装路径: ./configure --prefix=/usr/local/xxx(安装gettext时不需要指定路径)
4.make && make install
安装jpeg库
1.tar –xzvf jpegsrc.v6b.tar.gz
2.cd jpeg-6b/
3.cp /usr/share/libtool/config.* ./
4.mkdir /usr/local/jpeg6
5.mkdir /usr/local/jpeg6/include
6.mkdir /usr/local/jpeg6/lib
7.mkdir /usr/local/jpeg6/bin
8.mkdir /usr/local/jpeg6/man/man1
10. ./configure –enable-static –enable-shared –prefix=/usr/local/jpeg6
11. make && make install
安装GD库
1: tar –xzvf gd-2.0.35.tar.gz
2: cd gd-2.0.35.tar.gz/
3: vi gd_png.c
将大约在第16行处的#include “png.h”改为#include “/usr/local/libpng/include/png.h”
4: /configure –prefix=/usr/local/gd –with-jpeg=/usr/local/jpeg6/ --with-png=/usr/local/libpng/ --with-freetype=/usr/local/freetype/ --with-zlib=/usr/local/zlib/
5: make && make install(如果第一次运行报错的话,可以再次运行解决)
安装PHP:
1:tar -xzvf php-5.3.8.tar.gz
2:cd php-5.3.8/
3:./configure --prefix=/usr/local/php5 --with-gd=/usr/local/gd --with-jpeg-dir=/usr/local/jpeg6/ --with-zlib-dir=/usr/local/zlib/ --with-freetype-dir=/usr/local/freetype/ --enable-trace-vars --enable-mbstring --with-curl=/usr/local/curl/ --enable-soap --enable-zip --enable-fastcgi --enable-fpm --with-config-file-path=/usr/local/php5/etc
4:vi ./ext/gd/libgd/gd_compat.c
将# include <png.h>
改为 # include "/usr/local/libpng/include/png.h"
5:make && make install
6:cp ./sapi/fpm/php-fpm.conf /usr/local/php5/etc/
7:install -v -m644 php.ini-production /usr/local/php5/etc/php.ini
执行完第七步之后在/usr/local/php5/etc目录下将有php-fpm.conf 和 php.ini 文件,下面需要对这两个文件进行配置。
建议: http://www.php.net/manual/zh/ 中文版PHP详细解说,你不能错过的PHP进阶文档。
二.Apache如何支持能够Php?
背景知识:
在现代的类unix系统中,有一种非常好的机制,叫做DSO的动态连接/加载,它提供了一种方法,将一段代码编译成一种特殊格式后可在可执行程序运行时将这段程序加载到它的地址空间中。而Apache也从1.3版本开始,加入了此功能。因为Apache已经用了基于分派表(dispatch-list-based)的方法来连接外部模块到Apache的核心。所以Apache也就当然地在运行时用DSO来加载其模块。
这种加载有两种方式:在一个可执行程序开始运行后通过一个叫d.so的系统程序自动加载,或在可执行程序内部通过Unix加载器(Loader)的系统编程接口调用dlopen()/dlsym()来手工加载。
在第一种方式中,DSO通常叫作共享库或DSO库,它们存放在系统目录中(通常是/usr/lib,/usr/lib64(对于64位系统))。它们与可执行程序的联系是在编译这个可执行程序时,通过传递连接器一个-lfoo参数来建立的。这里对库的引用直接编码在可执行程序中,因而在程序运行时,Unix加载器会通过以下途径寻找libfoo.so:在系统目录/usr/lib64下,在通过-R连接参数传递给连接器后被编码在可执行程序的路径中,在通过环境变量LD_LIBRARY_PATH指定的目录中。加载器会解析出来那些在可执行程序中使用但是在DSO定义的标志(symbol)。
在第二种方式中,DSO通常被叫做共享对象或DSO文件,命名它们时可以使用任意的扩展名,虽然规范的命名是foo.so这个样子的。这些文件通常存放在程序所在目录或子目录中,它们与执行它们的程序没有自动建立的联系。相反,可执行程序在运行时通过dlopen手工将DSO加载进来。在我的实例中,Apache安装目录中含有有一个叫/modules的文件夹,也就是作为相关的DSO文件的存放目录。如实例中支持PHP会用到的libphp5.so。
Apache之模块化服务器:
前言:
Apache是模块化的服务器,这意味着核心中只包含实现最基本功能的模块。扩展功能可以作为模块动态加载。默认情况下,只有base组的模块被编译进了服务器。如果服务器在编译时包含了DSO模块,那么各模块可以独立编译,并可随时用LoadModule指令加载;否则,要增加或删除模块必须重新编译整个Apache。用于特定模块的指令可以用<IfModule>指令包含起来,使之有条件地生效。
Apache对独立模块的DSO支持是建立在只能被静态编译进Apache核心的mod_so基础之上的,这是core以外唯一不能作为DSO存在的模块,而其他所有已发布的Apache模块,都可以通过安装文档中阐述中的编译选项 --enable-module=shared 被独立地编译成DSO并使之生效。一个被编译为mod_foo.so的DSO模块,可以在httpd.conf中使用mod_so的LoadModule指令,在服务器启动或重新启动时被加载。新提供的支持程序apxs(APache eXtenSion)可以在Apache源代码树之外编译基于DSO的模块,从而简化了Apache DSO模块的建立过程。其原理很简单:安装Apache时,configure的 make install 命令会安装Apache C头文件,并把依赖于特定平台的编译器和连接器参数传给apxs程序,使用户可以脱离Apache的发布源代码树编译其模块源代码,而不改变支持DSO的编译器和连接器的参数。
模块选项:
有两种使用模块的方法:一是静态连接进核心,二是作为DSO模块动态加载;如果编译中包含任何DSO模块,则mod_so(运行时加载DSO模块)会被自动包含进核心。如果希望核心能够装载DSO,但不实际编译任何DSO模块,则需明确指定"--enable-so=static"。
一般语法:
一般情况下你可以使用如下语法启用或者禁用某个模块:
--disable-MODULE
禁用MODULE模块(仅用于基本模块)
--enable-MODULE=shared
将MODULE编译为DSO(可用于所有模块)
--enable-MODULE=static
将MODULE静态连接进核心(仅用于扩展和实验模块)
--enable-mods-shared=MODULE-LIST
将MODULE-LIST中的所有模块都编译成DSO(可用于所有模块)
--enable-modules=MODULE-LIST
将MODULE-LIST静态连接进核心(可用于所有模块)
上述 MODULE-LIST 可以是:
(1)用引号界定并且用空格分隔的模块名列表
--enable-mods-shared='headers rewrite dav'
(2)"most"(大多数模块[遇见错误模块时忽略该模块而不中断配置过程])
(3)"all"(所有模块[遇见错误模块时中断配置过程并报错])
--enable-mods-shared=most
此外:
在Apache程序运行后,你可以通过httpd –l来检查哪些是静态连接入核心的模块,通过httpd-M来检查所有被连接进入核心的模块及其连接性质。
注意:
configure将忽略MODULE和MODULE-LIST中的拼写错误,注意仔细拼写。用于MODULE和MODULE-LIST中的名称是"mod_NAME"中去掉"mod_"并将剩余部分中的下划线"_"替换为连字符"-"以后的结果,比如"mod_log_config"模块应当表示为"log-config"。
Apache之httpd.conf文件的配置:
编辑apache配置文件httpd.conf
用编辑器打开:vim /usr/local/apache2/conf/httpd.conf
#AddType application/x-tar .tgz
下加一行
AddType application/x-httpd-php .php
注:添加对php类型的支持
如果你搜索其它地方没有以下这行,请把上面的#号去掉
LoadModule php5_module modules/libphp5.so
注:动态加载php模块进入核心,很多时候不能成功解析php页面,甚至明明是要解析确出现保存页面这种情形,往往与此有关
还有找到
DirectoryIndex index.html index.html.var
在后面加 index.php 让它把index.php做为默认页
# don't use Group #-1 on these systems!
把下面的用户名和组改为
User apache
Group apache
#ServerName
把#去掉,后面的IP改成你的IP.
DocumentRoot "/usr/local/apache2/htdocs"
把/usr/local/apache2/htdocs改为你存放网页文件的路径
为了让中文网页没乱码,找到
AddDefaultCharset iso8859-1
把后面的iso8859-1改为gb2312 或者是干脆off。
off的好处是关掉了服务器的默认语言的发送,而仅凭html文件头中设置的语言来决定网页语言。
其他的选项就自己修改吧!或者到http://article.21e.cn 有一个专门的httpd.conf的说明