网上有很多关于编译安装php&&apache的教程,但是个人感觉都不是很好,所以决定干脆自己写一篇.本篇不单单是编译安装php&&apache的教程. 还穿插了一些其他的知识点.
本次安装环境为CentOS6.5,如果是ubuntu/debain发行版,也不必太担心,因为使用源码编译安装并不会因为发行版本的问题而有所不同.
在开始之前,需要准备一下编译环境.执行下面命令来安装好一些库文件,免得编译的时候出现各种各样的问题,很多人会好奇,为什么要安装这么多东西,这些东西有什么用?这里面除了gcc, gcc-c++
用来编译C/C++之外, 其他的都是php&&apache扩展用到的一些库.所以不必纠结于此.安装即可.
yum update
yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libpng libpng-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses curl openssl-devel gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel readline-devel libxslt-devel expat-devel xmlrpc-c xmlrpc-c-devel
安装Apache
开始之前先叨叨一下,在很多时候可能会看到httpd或者apache2这个名称,其实不管是httpd, apache还是apache2,都是一个东西.
在安装httpd之前,我们需要先安装如下三个东西
Apr(apache portable runtime)
Apr-Util
pcre
至于这三个是什么东西,这里暂且不表.有兴趣的同学可以自行google.
执行如下命令下载需要的三个源码包,注意如果wget的下载链接失效,只需到官网下载即可.
cd /usr/local/src
wget http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gz
wget http://mirrors.cnnic.cn/apache//apr/apr-util-1.5.4.tar.gz
wget http://downloads.sourceforge.net/project/pcre/pcre/8.39/pcre-8.39.tar.gz (注意, 这个网址需要科学上网)
wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.23.tar.bz2
下面,解压apr的源码包,并且编译安装.
tar -zxvf apr-1.5.2.tar.gz
cd /apr-1.5.2
./configure --prefix=/usr/local/apr
make && make install
上面是linux平台编译安装软件的典型步骤,./configure, make, make install
../configure
后面带的是编译参数, --prefix
表示这个软件会安装在哪里.你可以自行指定不同的安装目录,但是要注意的是,我们后面会用到这个目录,所以你得记得你安装在了哪里.安装完毕之后,你可以在/usr/local
看到apr的目录,这个目录就是apr的安装目录了.
同样,安装apr-util的方式跟上面类似,这是./configure
多了一个参数--with-apr
指定了apr安装在哪里,因为apr-util的安装依赖apr.如果你有兴趣,可以自行./configure --help
查看更多参数.
tar -zxvf apr-util-1.5.4
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
最后编译安装pcre,这里安装 pcre不指定安装路径,默认会安装在/usr/local/bin
下面.(CentOS下)
tar -zxvf pcre-8.39.tar.gz
cd pcre-8.39
./configure
make && make install
至此,我们可以安装apache了.同样,安装apache的步骤跟上面一样.只是可能./configure
指定的参数不一样.
tar -zxvf httpd-2.4.23.tar.bz2
cd httpd-2.4.23
./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make
make install
如上,安装好之后,你就可以在/usr/local/
下看到apache目录了,所有有关apache的东西都在这个目录下,包括log,配置文件,web站点.你的apache目录内部可能包含如下信息
drwxr-xr-x 2 root root 4096 Dec 2 19:16 bin
drwxr-xr-x 2 root root 4096 Dec 2 19:16 build
drwxr-xr-x 2 root root 4096 Dec 2 19:16 cgi-bin
drwxr-xr-x 4 root root 4096 Dec 2 20:10 conf
drwxr-xr-x 3 root root 4096 Dec 2 19:16 error
drwxr-xr-x 2 root root 4096 Dec 2 19:39 htdocs
drwxr-xr-x 3 root root 4096 Dec 2 19:16 icons
drwxr-xr-x 2 root root 4096 Dec 2 19:16 include
drwxr-xr-x 2 root root 4096 Dec 2 19:38 logs
drwxr-xr-x 4 root root 4096 Dec 2 19:16 man
drwxr-xr-x 14 root root 12288 Jul 1 01:15 manual
drwxr-xr-x 2 root root 4096 Dec 2 19:31 modules
其中htdocs就是用于放置web页面的,而conf里面存放了所有的配置文件.
如果需要使用service httpd start
的方式启动apache服务,需要执行如下的命令 :
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
至此,执行service httpd start
启动服务,访问127.0.0.1
(如果是服务器搭建在本机的话)可以看到页面输出It's work
.
安装PHP
有了上面安装apache的经验,你应该知道,编译安装php也就是三个步骤,可能不同的是编译安装的选项不大一样.从PHP官网下载你所需要的php版本,任意后缀的压缩包都可以,如同上面解压,进入源码目录.执行编译三步骤,这里要注意的是./configure
的参数.
./configure \
--prefix=/usr/local/php/ \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/etc/conf.d \
--enable-soap \
--with-openssl \
--with-mcrypt \
--with-pcre-regex \
--with-sqlite3 \
--with-zlib \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--with-cdb \
--enable-dom \
--enable-exif \
--enable-fileinfo \
--enable-filter \
--with-pcre-dir \
--enable-ftp \
--with-gd \
--with-openssl-dir \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-gettext \
--with-gmp \
--with-mhash \
--enable-json \
--enable-mbstring \
--disable-mbregex \
--disable-mbregex-backtrack \
--with-libmbfl \
--with-onig \
--enable-pdo \
--with-pdo-mysql \
--with-zlib-dir \
--with-pdo-sqlite \
--with-readline \
--enable-session \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-libxml-dir \
--with-xsl \
--enable-zip \
--enable-mysqlnd-compression-support \
--with-pear \
--with-mysqli \
--with-apxs2=/usr/local/apache/bin/apxs
./congigure
所携带的额参数有点多,这里主要要注意的是最后一个参数:--with-apxs2
,我们这里使用的是模块化的方式安装php,并没有使用fpm
的方式安装,所以最后一个参数的值应该为apache的apxs
所在路径.除此之外,--with-config-file-path
和--with-config-file-scan-dir
指定了配置文件的放置路径.
执行上面的命令在CentOS6.5下(可能其他环境下也会)会报一个错误configure: error: mcrypt.h not found. Please reinstall libmcrypt
,这个错误四因为服务器没有安装加密使用的mcrypt插件,只要使用yum install libmcrypt libmcrypt-devel
安装即可,当然你也可以自行选择使用源码编译的方式安装.
安装好mrycpt之后,重新自行上面的命令既可,成功之后自行make && make install
即可完成安装.
最后,拷贝源码包中的php.ini到php的配置文件中,这个是因为我们编译安装的时候不会生成php.ini的配置文件,我们需要自己拷贝一份.你可能注意到php源码包中有php.ini-production
跟php.ini.development
两个文件,这两个文件是代表生产环境跟开发环境使用的配置文件, 这里不纠结这些,拷贝任意一个.
cp /usr/local/src/php-5.6.28/php.ini-production /usr/local/php/etc/php.ini
但是,这个时候apache是没有办法执行以php结尾的文件,要想让apache能够执行以php结尾的文件, 还需要做一件事情:找到apache的主配置文件/usr/local/apache/conf/httpd.conf
,在AddType application/x-compress .Z
的后面添加两行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
再找到DirectoryIndex index.html
这一行,在index.html前面添加index.php
,这里index.html跟index.ph的先后顺序表明了如果同时存在index.html跟inde.php的时候.访问主页优先选择index.php.
执行service httpd restart
,然后执行echo "<?php phpinfo();" >> /usr/local/apache/htdocs/index.php
生成index.php文件,访问主页,应该可以看到有关php的信息.
至此php跟apache安装完毕.
Other
好了,php跟apache是安装成功了,但是如果想要添加php扩展,应该如何安装呢.这里介绍两个安装php扩展的方式
编译源码安装
同上,我们可以下载扩展的源码包,然后自己编译安装,一样,安装唯一不同的是./configure
的参数不一样,这里以安装redis扩展演示一下,其他的扩展大同小异
git clone https://github.com/phpredis/phpredis (如果没有使用git的经验,可以google redis扩展的源码包下载)
cd phpredis
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
说明一下上面命令中的两点 :
/usr/local/php/bin/phpize
:在编译扩展之前,一般要先执行这个命令,如果你的安装路径跟我的一样的话, 你应该可以在/usr/local/php/bin
中找到.至于phpize的作用 : phpize 命令是用来准备 PHP 扩展库的编译环境的,更多信息访问php官网关于phpize的介绍./configure
后面携带的参数,如果环境中有多个php版本,可以使用--with-php-config
来指定使用哪一个版本编译,更多信息访问php官网关于php-config的介绍
编译完成之后redis的扩展会被安装在/usr/local/php/lib/php/extensions/no-debug-zts-20131226/
下.你可以在这个目录下找到redis.so
的信息.接下来,我们在/usr/local/php/etcphp.ini
中添加一行extension=redis.so
,刷新phpinfo等页面,可以找到redi扩展的信息.
pecl
这个东西你可能会有点眼熟,还有pear,可能你都见过这两个东西,但是你并没有用过他们,这两个东西的作用都差不多,都是用来安装php扩展的.至于这两个东西有什么不同,这里不展开,只要知道PEAR跟PECL都可以用来安装php扩展.下面演示下如果使用pecl如何安装redis扩展.
PECL这个网站包含了所有的php扩展,你可以访问这个网站,查找你要安装的扩展的信息.比如这里搜索redis扩展可以看到如下信息 :
找到redis,然后执行命令
/usr/local/php/bin/pecl install redis-2.2.8
可以看到,pecl会自动帮我们下载redis扩展的源码包,然后自动编译安装,安装好之后,扩展也是放在/usr/local/php/lib/php/extensions/no-debug-zts-20131226/
下,我们只要在php.ini中添加extension=redis.so
就可以了.pecl安装php扩展的简单语法如下 : pecl install 扩展名-版本号
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。