想在 RedHat Linux 9.0下配置个PHP环境。网上看了很多资料说的大都大同小异(./configure >make>make install )三步下来配是配好了。可还是不太知道所以然。
这里我收集,结合了众多资料。来详细讲解下 怎样做,为什么!
都是较基础的东西,我把之下来便于以后学习用!有误之处忘大家指正!有补充的欢迎留言.
我的环境是Red Hat linux 9.0 + httpd-2.2.4 + PHP-5.2.4 + MySQL-5.0.22 这里mysql安装就不多说了,重点学习Apache 编译安装.(开始安装前先准备好相关源码,还有libxml2包根据所安装版本不同可能需要升级下)
Apache 安装
Apache 编译安装可分为动态编译安装 or 静态编译安装 概念区别如下(个人理解):
静态编译安装指把某个模块module(如PHP模块)直接编译进Apache内核,当apahce 要用到时可以直接拿过来用。
动态编译安装指把某个模块module(如PHP模块)名在内核里注册了下(当然你也可以在安装好以后再注册)。实际要用的东西并不编进内核,而是单独编译成一个动态共享对象(DSO),只要到用时根据这注册的模块名从外部调过这个DSO模块来用(如libphp5.so 这是PHP5的DSO LINUX下.so 文件跟Windows下.dll差不多意思)。
动、静态编译 时配置上区别
静态编译时需要把要用的模块都静态编译进Apache
如
./configure --prefix=/opt/apache2
--enable-rewrite
--enable-ssl
动态编译只是多个几个 shared ,(shared 指将此模块编译成动态的)
/configure--prefix=/opt/apache2 --enable-so --enable-so --enable-mods-shared=[most |all]
大家注意了--enable-so相当与之前旧版本的–enable-module=so,而–enable-mods-shared=most又等同与以前的 --enable-shared=max 新旧版本配置数据有所不同,配置前可以通过./coufigure -h来查看配置参数
--enable-so 参数指定需要启动so模块,so模块是用来提DSO支持的apache核心模块
--enable-mods-shared=[most |all]这个参数的作用时编译apache时,把除了so以外的所有apache的标准模块都编译成DSO模块。而不是编译进apache核心内。
现在知道了--enable-so的意思是说
让apache 核心装载DSO,但是不实际编译任何动态模块
--enable-ModuleName的意思是说 编译并包含模块ModuleName
而 --enable-ModuleName=shared 的意思是说将这个模块编译成动态的.
如何希望动态编译模块
比如:--enable-rewrite应该替换为: --enable-rewrite=shared
如果把-shared去掉,就是静态的编译了
(Apache对独立模块的DSO支持是建立在只能被静态编译进Apache核心的mod_so基础之上的,这是core以外唯一不能作为DSO存在的模块,而其他所有已发布的Apache模块,都可以通过安装文档中阐述中的编译选项 --enable-module=shared 被独立地编译成DSO并使之生效。一个被编译为mod_foo.so的DSO模块,可以在httpd.conf中使用mod_so的LoadModule指令,在服务器启动或重新启动时被加载。)
----------------------------
编译php
./configure --prefix=/opt/php5 --with-mysql=/opt/mysql --with-apxs2=/opt/apache2/bin/apxs
如果要使用MYSQL 数据库那么在安装编译PHP之前要先安装好MYSQL。
安装完后系统默认php.ini要放在PHP安装目录下的lib文件夹里, cp /php源文件目录/php.ini-dist /opt/php5/lib/php.ini。
注意这里是apxs2!旧版本用的是with-apxs ,新提供的支持程序apxs(APache eXtenSion)可以在Apache源代码树之外编译基于DSO的模块,这样就不用重新编译Apache 来支持其它模块了。
修改httpd.conf 在AddType application/x-gzip .gz .tgz后一行添加
AddType application/x-httpd-php .php
启动一下apache
/opt/apache2/bin/apachectl start