一、准备工作
1、安装编译工具gcc*
注意解决依赖关系,推荐使用yum安装,若不能联网可使用安装光盘作为yum源
yum install -y gcc*
MySQL编译需要gcc-c++
2、关闭系统RPM包安装的apache、MySQL等服务
service httpd stop
service mysqld stop
…
确定rpm包安装的apache和MySQL不能开机自启动。
chkconfig –level 2345 httpd(mysqld) off
…
3、关闭SELinux,防火墙允许80端口访问。
二、编译安装
*每个源码包配置编译安装完成之后,确认安装目录下时候生成安装文件。
make clean 清除错误的编译文件,然后重新编译
安装libxml2
libxml2是一个xmlc语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MITlicense的免费开源软件。它除了支持c语言以外,还支持C++、PHP、Pascal、ruby、tcl等语言的绑定,能在Windows、Linux、Solaris、macOS等平台运行。功能还是相当强大的。
libxml是一个用来解析XML文档的函数库。它用C语言写成,并且能为多种语言所调用,例如C语言,C++,XSH,C#、python,kylix/Delphi,和PHP等。Perl中也可以使用XML::libxml模块。它最初是为GNOME开发的项目。但是现在可以用在各种各样的方面。LibXML代码可移植性非常好。基于标准的ANSIC库,并采用MIT许可证。
安装:
yum install -y python-devel #开发环境包,必须装
tar -zxf libxml2-2.9.1.tar.gz #解压源码包
cd libxml2-2.9.1 #进入解压后的目录
./configure --prefix=/usr/local/libxml2 #指定安装目录,预编译
make && make install #编译安装
安装libmcrypt
libmcrypt是加密算法扩展库。支持DES、3DES、RIJNDAEL、Towfish、GOST、GAST-256、ARCFOUR、SERPENT、SAFER+等算法。
tar -zxf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt
make && make install
安装libltdl(libmcrypt的子源码包),源码包在libmcrypt目录的libltdl目录。安装方式可以通过./configure –help查看。
cd libmcrypt-2.5.8/libltdl/
./configure --enable-ltdl-install
make && make install
安装mhash(哈希算法)
mhash是基于离散数学原理的不可逆的PHP加密方式扩展库,其在默认情况下不开启。mhash的可用于创建校验数值,消息摘要,消息确认码,以及无需原文的关键信息保存(如密码)等。
tar -zxf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure && make && make install
安装mcrypt
mcrypt是PHP里面重要的加密支持扩展库。mcrypt库支持20多种加密算法和8种加密模式。
tar -zxf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
LD_LIBRARY_PATH=/usr/local/libmcrypt/lib/:/usr/local/lib ./configure --with-libmcrypt-prefix=/usr/local/libmcrypt/
以上为一条命令。LD_LIBRARY_PATH用于指定libmcrypt和mhash的库的位置。--with-libmcrypt-prefix用于指定libmcrypt软件位置。
make && make install
#libmcrypt没有安装完成,这是PHP的模块,需要等PHP安装完成之后,再继续安装。
安装zlib
zlib是提供数据压缩用的函数库,zlib使用DEFLATE算法,最初是为libpng函数库所写,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。
tar -zxf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
vim Makefile #解决小bug在CFLAGS=-O3 -DUSE_MMAP加上-fPIC
make
make install
安装libpng
libpng软件包包含libpng库,这些库被其他程式用于解码png图片。
tar -zxf libpng-1.2.31.gz
cd libpng-1.2.31
./configure --prefix=/usr/local/libpng
make && make install
安装jpeg6(用于解码.jpg和.jpeg图片)
创建目录
mkdir /usr/local/jpeg6 存放主程序的目录
mkdir /usr/local/jpeg6/bin 存放命令的目录
mkdir /usr/local/jpeg6/lib 存放数据库的目录
mkdir /usr/local/jpeg6/include 存放子配置文件的目录
mkdir -p /usr/local/jpeg6/man/man1 存放帮助手册的目录
unzip jpeg-6b.zip
cd jpeg-6b
--enable-shared #建立共享库
--enable-static #建立静态库
yum install -y libtool* 安装依赖库(需要拷贝libtool里的文件,要不然安装会报错)
cp /usr/share/libtool/config/config.sub ./
cp /usr/share/libtool/config/config.guess ./ 需要拷贝两个文件到当前目录下。
chmod -R 777 * #红字必做
./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable—static
make && make install
安装freetype
freetype库是一个开源、高质量的可移植字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType、open type、typel、CID、CFF、WindowsFON/FNT,X11 PCF等。支持单色位图,反走样位图的渲染。Free type库是高度模块化的程序库,虽然它是使用ANSI C 开发,但是采用面向对象的思想,因此,free type的用户可以灵活地对它进行裁剪。
tar -zxf freetype-2.3.5.tar
cd freetype-2.3.5
./configure --prefix=/usr/local/freetype
make && make install
安装GD库
GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或生成图片。在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码。或者对网站数据生成报表等。
mkdir /usr/local/gd2
tar -zxf gd-2.0.35.tar
cd gd-2.0.35
vim gd_png.c
有个png错误需要将#include "/png.h" 更改为 #include "/usr/local/libpng/include/png.h"
./configure --prefix=/usr/local/gd2/ --with-jpeg=/usr/local/jpeg6/ --with-freetype=/usr/local/freetype/ --with-png=/usr/local/libpng/
#若前面配置zlib时没有指定安装目录,gd配置时不要添加--with-zlib=/usr/local/zlib参数。
make && make install
安装APACHE
APR(apache的可移植运行库)
主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库
安装准备:
tar -zxf httpd-2.4.7.tar.gz #解压源码包
#将组件源码包解压到apache的安装目录下
tar -zxf apr-1.4.6.tar.gz -C httpd-2.4.7/srclib/
tar -zxf apr-util-1.4.1.tar.gz -C httpd-2.4.7/srclib/
对解压后的包重命名去掉版本号。
mv apr-1.4.6/ apr
mv apr-util-1.4.1/ apr-util
准备好后先安装pcre
pcre基于prel的兼容正则表达式支持
tar -zxf pcre-8.34.tar.gz
cd pcre-8.34
./configure && make && make install
正式安装apache
安装选项:
--sysconfigdir=[主配置文件存放目录]
--with-included-apr #加载组件一块安装
--enable-so #启用动态库支持
--enable-deflate=shared #对动态资源能够压缩
--enable-expires=shared #支持动态超时时间
cd httpd-2.4.7
./configure --prefix=/usr/local/apache2/ --sysconfdir=/usr/local/apache2/etc/ --enable-so --with-included-apr --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared
make && make install
/usr/local/apache2/bin/apachectl start #启动apache
若启动时提示/usr/local/apache2/modules/mod_deflate.so无权限,可关闭SELinux或者执行命令chcon -t texrel_shlib_t /usr/local/apache2/modules/mod_deflate.so ,类似此类.so文件不能载入或者没有权限的问题,都是SELinux问题,使用命令“chcon -t texrel_shlib_t [文件名] ”即可解决。MySQL也有类似问题。
安装数据库
安装MySQL依赖包
cmake #oracle收购后添加的一个编译器,用来代替configure
bison #语法分析程序,兼容不同的操作系统。
这三个包可以直接用yum安装
yum install -y cmake bison
安装ncurses
ncurses提供字符终端处理库,包括面板和菜单。它提供了一套控制光标,建立窗口,改变前景背景颜色以及处理鼠标操作的函数。使用户在字符终端下编写应用程序时绕过底层机制,他是一个可以使用应用程序直接控制终端屏幕显示的函数库。
tar -zxf ncurses-5.9.tar.gz
cd ncurses-5.9
./configure --with-shared --without-debug --without-ada --enable-overwrite
make && make install
也可以使用yum安装
如果没有安装ncurses执行安装MySQL的时候会报错。
-without-ada参数为设定不编译为ada绑定,因进入chroot环境不能用ada
--enable-overwrite参数为定义把头文件安装到/tools/include下而不是/tools/include/ncurses目录。
useradd mysql #创建数据库用户和组
安装MySQL
tar -zxf mysql-5.5.23.tar.gz
cd mysql-5.5.23
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306
make && make install
如果报错,需要清除缓存,请使用一下命令
make clean
rm CMakeCache.txt
安装参数:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql 安装位置
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock 指定socket(套接字)文件位置
-DEXTRA_CHARSETS=all 扩展字符支持
-DDEFAULT_CHARSET=utf8 默认字符集
-DDEFAULT_COLLATION=utf8_general_ci 默认字符校对
-DWITH_MYISAM_STORAGE_ENGINE=1 安装myisam存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 安装innodb存储引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 安装memory存储引擎
-DWITH_READLINE=1 支持readline库
提供交互式输出和历史记录编辑的文本行工具
-DENABLED_LOCAL_INFILE=1 启用加载本地数据
-DMYSQL_USER=mysql 指定MySQL的运行用户
-DMYSQL_TCP_PORT=3306 指定监听端口
配置MySQL
cd /usr/local/mysql/ #进入安装完成的目录
chown -R root ./ #递归设置所有文件的属主为root
chown -R mysql ./data/ #将数据相关的目录属主设置为mysql
cp support-files/my-medium.cnf /etc/my.cnf #拷贝配置模板文件到/etc目录下作为配置文件。
/usr/local/mysql/scripts/mysql_install_db --user=mysql #初始化数据库
出现两个OK表示数据库正常。
/usr/local/mysql/bin/mysqld_safe --user=mysql & #启动数据库并放到后台执行,如果不放在后台执行,将会占用当前输出界面。
/usr/local/mysql/bin/mysqladmin -uroot password 123456 #设置用户名密码
/usr/local/mysql/bin/mysql -uroot -p123456 #登陆MySQL
简单的SQL语句:
show dadabases; #显示数据库
use test; #选择数据库
show tables; #显示数据表
s #显示字符集
history -c #为避免被人知道用户名密码,建议清空历史命令。
数据库开机自启:
把/usr/local/mysql/bin/mysqld_safe --user=mysql &写入到/etc/rc.local中。
安装PHP
编译前确保系统已经安装了libtool和libtool-ltdl软件包。
yum -y install libtool*
yum -y install libtool-ltdl*
php5.4的bug,检测gd库有问题,需要手动修改
解决办法:
vim /usr/local/gd2/include/gd_io.h
typedef struct gdIOCtx
{
…
void (*data); #在typedef struct gdIOCtx模块中加入此句,注意结尾标点符号
}
tar -zxf php-5.4.25.tar.gz
cd php-5.4.25
./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql/ --with-libxml-dir=/usr/local/libxml2/ --with-jpeg-dir=/usr/local/jpeg6/ --with-png-dir=/usr/local/libpng/ --with-freetype-dir=/usr/local/freetype/ --with-gd=/usr/local/gd2/ --with-mcrypt=/usr/local/libmcrypt/ --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-soap --enable-mbstring=all --enable-sockets --with-pdo-mysql=/usr/local/mysql/ --without-pear
make && make install
注
若前面配置zlib时没有指定安装目录,PHP配置时不要添加--with-zlib-dir=/usr/local/zlib
参考老男孩参数:
(./configure --prefix=/application/php-5.3.27 --with-mysql=/application/mysql/ --with-iconv-dir=/application/libiconv/ --with-freetype-dir --with-jpeg-dir --with-zlib --with-libxml-dir=/usr/ --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-short-tags --enable-zend-multibyte --enable-static --with-xsl --with-fpm-user=nginx --with-fpm-group=nginx --enable-ftp)
编译参数:
--prefix=/usr/local/php/ #软件安装路径
--with-config-file-path=/usr/local/php/etc/ #指定主配置文件目录
--with-apxs2=/usr/local/apache2/bin/apxs #指定apache动态模块位置
--with-mysql=/usr/local/mysql/ #指定MySQL位置
--with-libxml-dir=/usr/local/libxml2/ #指定libmxl位置
--with-jpeg-dir=/usr/local/jpeg6/ #指定jpeg位置
--with-png-dir=/usr/local/libpng/ #指定libpng位置
--with-freetype-dir=/usr/local/freetype/ #指定freetype位置
--with-gd=/usr/local/gd2/ #指定gd库位置
--with-mcrypt=/usr/local/libmcrypt/ #指定libmcrypt位置
--with-mysqli=/usr/local/mysql/bin/mysql_config #指定mysqli的位置
mysqli扩展允许用户访问由MySQL4.1或更高版本所提供的功能。经MySQL AB授权mysql(指PHP中的模块)发展到现在显得比较凌乱,有必要重新做下整理。同时有必要跟上MySQL(DBMS)的发展步伐,加入新的特性的支持,以及适应MySQL(DBMS)以后的版本。所以诞生了mysqli.dll
--enable-soap #支持soap服务
SOAP是基于XML的简易协议,可使应用程序在HTTP之上进行信息交换。或者更简单地说:SOAP是用于访问网络服务的协议。
--enable-mbstring=all #支持多字节,字符串
--enable-sockets #支持套接字
--with-pdo-mysql=/usr/local/mysql/ #启用mysql的pdo模块支持
--without-pear #步安装pear(安装pear需要连接互联网)
注:查看编译时使用的参数 ./sbin/php-fpm -i | grep configure
mkdir /usr/local/php/etc
cp php.ini-production /usr/local/php/etc/php.ini
vim /usr/local/apache2/etc/httpd.conf
编辑apache配置文件,找到AddType字段在后面加:AddType application/x-httpd-php .php .phps .phtml将php相关的资源交由php执行。
找到DirectoryIndex index.html在后面加上index.php默认加载php主页。
vim /usr/local/apache2/htdocs/index.php #编写php模块测试文件
vim /usr/local/apache2/htdocs/mysql.php #编写MySQL数据库连接测试文件
编辑/etc/rc.local加入一下两句,服务开机自启。
/usr/local/apache2/bin/apachectl start
/usr/local/mysql/bin/mysqld_safe --user=mysql &
Nginx配合PHP配置如下:
配置PHP引擎配置文件php.ini
cp php.ini-production /application/php/lib/php.ini
php.ini-development模板适用于开发环境、php.ini-production模板适用于生产环境。开发环境更多是开启日志调试信息。而生产环境都是关闭状态(off)
配置PHP服务的配置文件php-fpm.conf
这里使用的默认配置,没有做任何改动。
启动PHP服务php-fpm
/application/php/sbin/php-fpm
检查端口情况:netstat -natp | grep 9000 (默认使用9000端口)
配置nginx支持PHP
vim nginx.conf
server区域增加一个location区域
lication ~ .*.(php|php5)?${
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
增加默认首页文件index.php
location / {
root html;
index index.html index.htm index.php;
}
重新加载文件nginx
/application/nginx/sbin/nginx -s reload
编辑测试页面:
vim test_info.php
<?php
phpinfo();
?>
vim test_mysql.php
<?php
$link=mysql_connect('localhost','','') or mysql_error();
if ($link)
{
echo "mysql successful";
}else
{
echo mysql_error();
}
?>
最后访问测试。