前面编译安装完成了 Apache 和 MySQL,Apache 的编译安装以及需要的系统之类的见《编译安装LAMP:Apache篇》,MySQL 的编译安装见《编译安装LAMP:MySQL篇》,最后我们要进行 PHP 的编译安装。

已更新 PHP 7.0.X 版本编译选项——20160115

PHP 5.5 PHP 7.0

一、用 root 用户连接上主机

 

二、安装 PHP 需要的组件

安装 PHP 需要的大部分必要组件在安装 Apache 之前已经安装了, 现在安装上剩余的一部分。

 

1、安装 libiconv(iconv 模块)

libiconv 是由于有些计算机还在使用当地的传统的字符编码方式,为了顺利支持国际化的处理而存在的,所以仍然有在 Unicode 和其他的传统编码之间转换的需求。关于 libiconv,可以访问维基百科百度百科

可以在 GNU 的 FTP 下载最新版 libiconv,文件格式为 libiconv-版本.tar.gz。libiconv 自 2011 年就没更新了,最新版本为 1.14。若以后更新了,请使用最新版。

cd /usr/local/src
wget http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz
tar -zxf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make
make install

 

2、安装 libmcrypt、mhash、mcrypt(mcrypt 模块)

mcrypt 模块使 PHP 可以使用除了自带的几种加密函数外功能更全面的 mhashmcrypt。该模块在默认情况下不开启,所以 Linux 的 PHP 自身也不打包该库,需要自行到官方网站下载代码进行编译安装。关于 mcrypt,可以访问百度百科

在 libmcrypt 的 sourceforge 下载最新版 libmcrypt,文件格式为 libmcrypt-版本.tar.gz。libmcrypt 自 2007 年就没更新了,最新版本为 2.5.8。若以后更新了,请使用最新版。

cd /usr/local/src
wget http://tenet.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
tar -zxf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install
ldconfig

cd libltdl/
./configure --enable-ltdl-install
make
make install

使用 ldconfig 命令是因为安装完成后把 libmcrypt 作为一个共享组件了,执行命令后共享对象就可以在 C/C++ 开发中被使用了。

 

在 mhash 的 sourceforge 下载最新版 mhash,文件格式为 mhash-版本.tar.gz。mhash 自 2008 年就没更新了,最新版本为 0.9.9.9

在 mcrypt 的 sourceforge 下载最新版 mcrypt,文件格式为 mcrypt-版本.tar.gz。mcrypt 自 2008 年就没更新了,最新版本为 2.6.8。若以后更新了,请使用最新版。

cd /usr/local/src
wget http://tcpdiag.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
wget http://softlayer-dal.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
tar -zxf mhash-0.9.9.9.tar.gz
tar -zxf mcrypt-2.6.8.tar.gz
cd mhash-0.9.9.9
./configure
make
make install

cat > /etc/ld.so.conf.d/local.conf << EOF
/usr/local/lib
EOF
ldconfig

cd ../mcrypt-2.6.8
./configure
make
make install

 

这里博主其实是遇到了问题的,就在 mcrypt 的 ./configure 那步会出现验证 libmcrypt 版本失败的情况,博主查找了很多资料,各有各的解决办法,最后博主还是使用了往共享库添加路径的方法解决的。

 

三、安装 PHP 5.5/7.0

接下来要进行 PHP 5.5/7.0 的安装。

不使用 PHP 5.6 是因为有些程序对 PHP 5.6 的兼容性不足。不使用 PHP 5.4 及之前版本是因为博主比较能接受 PHP 5.5,而且后面的 Shell 使用了 PHP 5.5 才内置的 opcache,PHP 5.4 及之前的版本虽然支持,但是要自行下载,当然也可以去除 --enable-opcache 进行配置。

 

现在 PHP 7 也释出了,PHP 7 的性能相比于 PHP 5 有很大的提升,博主已经迫不及待地用上了 PHP 7。

值得注意的是,从 PHP 7 开始,PHP 官方移除了对 libmysql 的支持,全部替换为 mysqlnd 驱动,所以配置时无需设置 --with-mysql=DIR,也就是说,从 PHP 7 开始,就无法用 mysql_connect() 进行数据库的连接了。

 

在 PHP 的官网下载最新版 PHP 5.5/7.0,选择你服务器所在国家的节点下载会比较快,文件格式为 php-5.5.小版本.tar.gz 或 php-7.0.小版本.tar.gz,下载时请使用最新版 PHP。

PHP 安装在 /usr/local/php 里,若先前安装 Apache 时改变了默认安装路径,需要修改 --with-apxs2 所在路径。

MySQL 我们将使用 PHP 的 mysqlnd 驱动,所以关于 MySQL 的编译选项都设置为 mysqlnd,这样即使没有安装 MySQL 也能正常编译 PHP。

 

注:若您的内存低于 1G,请加上 --disable-fileinfo ,不然编译报错,或者增加 Swap 分区,教程见《Linux手动创建Swap交换分区》

if [ `getconf WORD_BIT` = '32' ] && [ `getconf LONG_BIT` = '64' ] ; then
cp -frp /usr/lib64/libldap* /usr/lib
fi
#这里对64位系统拷贝文件,为了支持ldap
ln -s /usr/lib64/libc-client.so /usr/lib/libc-client.so
#为了支持imap链接lib64的文件到lib

 

PHP 5 编译选项,点击展开:

#安装PHP5看这里
cd /usr/local/src
wget http://cn2.php.net/distributions/php-5.5.31.tar.gz
tar -zxf php-5.5.31.tar.gz
cd php-5.5.31
./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-config-file-path=/usr/local/php/etc \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock=/tmp/mysql.sock \
--with-pcre-dir=/usr/local/pcre \
--with-iconv-dir=/usr/local/libiconv \
--with-libxml-dir=/usr \
--with-icu-dir=/usr \
--with-mhash \
--with-bz2 \
--with-curl \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-gd \
--with-gettext \
--with-gmp \
--with-ldap \
--with-ldap-sasl \
--with-mcrypt \
--with-openssl \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--without-pear \
--enable-opcache \
--enable-bcmath \
--enable-calendar \
--enable-sysvsem \
--enable-exif \
--enable-ftp \
--enable-gd-native-ttf \
--enable-intl \
--enable-mbstring \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-wddx \
--enable-zip
make
make install
#若内存低于1G,请把 --enable-zip 改为 --enable-zip --disable-fileinfo ,也就是加上 --disable-fileinfo 这项配置
#make -j 线程数 可以使用多线程编译
#PHP5.5安装完成

 

PHP 7 编译选项,点击展开:

#安装PHP7看这里
cd /usr/local/src
wget http://cn2.php.net/distributions/php-7.0.2.tar.gz
tar -zxf php-7.0.2.tar.gz
cd php-7.0.2
./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-config-file-path=/usr/local/php/etc \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock=/tmp/mysql.sock \
--with-pcre-dir=/usr/local/pcre \
--with-iconv-dir=/usr/local/libiconv \
--with-libxml-dir=/usr \
--with-icu-dir=/usr \
--with-mhash \
--with-bz2 \
--with-curl \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-gd \
--with-gettext \
--with-gmp \
--with-ldap \
--with-ldap-sasl \
--with-mcrypt \
--with-openssl \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--without-pear \
--enable-mysqlnd \
--enable-bcmath \
--enable-calendar \
--enable-sysvsem \
--enable-exif \
--enable-ftp \
--enable-gd-native-ttf \
--enable-intl \
--enable-mbstring \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-wddx \
--enable-zip
make
make install
#若内存低于1G,请把 --enable-zip 改为 --enable-zip --disable-fileinfo ,也就是加上 --disable-fileinfo 这项配置
#make -j 线程数 可以使用多线程编译
#PHP7安装完成

 

mkdir -p /usr/local/php/etc
cp php.ini-production /usr/local/php/etc/php.ini
#拷贝配置文件到指定位置

更多关于编译参数的内容,请移步《PHP5.5详细编译参数》

 

安装完成后,/usr/local/apache/conf/httpd.conf 文件不需要再进行修改,PHP 会自动增加一行 LoadModule。

注意:若不是新安装 PHP,而是从 PHP 5 升级到 PHP 7,则需要注释 Apache 的 httpd.conf 文件中的 php5_module,否则 Apache 找不到 libphp5.so 会无法启动。

 

四、配置 PHP

安装完 PHP 后,还有需要配置 php.ini 文件,接下来继续配置 PHP。

注:以下 PHP 的配置 shell 本人亲测有效,支持 PHP 5 和 PHP 7,全复制下来黏贴就行。

sed -i 's@^short_open_tag = Off@short_open_tag = On@' /usr/local/php/etc/php.ini
sed -i 's@^disable_functions.*@disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,pfsockopen@' /usr/local/php/etc/php.ini
sed -i 's@^expose_php = On@expose_php = Off@' /usr/local/php/etc/php.ini
sed -i 's@^allow_url_fopen.*@allow_url_fopen = Off@' /usr/local/php/etc/php.ini
sed -i 's@^max_execution_time.*@max_execution_time = 300@' /usr/local/php/etc/php.ini
sed -i 's@^;upload_tmp_dir.*@upload_tmp_dir = /tmp@' /usr/local/php/etc/php.ini
sed -i 's@^post_max_size.*@post_max_size = 50M@' /usr/local/php/etc/php.ini
sed -i "s@extension_dir = \"ext\"@extension_dir = \"ext\"\nextension_dir = \"/usr/local/php/lib/php/extensions/`ls /usr/local/php/lib/php/extensions/`\"@" /usr/local/php/etc/php.ini
sed -i 's@^upload_max_filesize.*@upload_max_filesize = 100M@' /usr/local/php/etc/php.ini
sed -i 's@^;date.timezone.*@date.timezone = Asia/Shanghai@' /usr/local/php/etc/php.ini
sed -i 's@^session.cookie_httponly.*@session.cookie_httponly = 1@' /usr/local/php/etc/php.ini
sed -i 's@^request_order.*@request_order = "CGP"@' /usr/local/php/etc/php.ini
#以上配置了php.ini部分

sed -i 's@^\[opcache\]@[opcache]\nzend_extension=opcache.so@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.enable=.*@opcache.enable=1@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.enable_cli.*@opcache.enable_cli=1@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.memory_consumption.*@opcache.memory_consumption=128@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.interned_strings_buffer.*@opcache.interned_strings_buffer=8@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.max_accelerated_files.*@opcache.max_accelerated_files=4000@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.max_wasted_percentage.*@opcache.max_wasted_percentage=5@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.validate_timestamps.*@opcache.validate_timestamps=1@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.revalidate_freq.*@opcache.revalidate_freq=60@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.fast_shutdown.*@opcache.fast_shutdown=1@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.file_cache=.*@opcache.file_cache=/tmp@' /usr/local/php/etc/php.ini
sed -i 's@^;opcache.file_cache_only=.*@opcache.file_cache_only=0@' /usr/local/php/etc/php.ini
#以上配置了php.ini的OPCache部分

ln -s /usr/local/php/bin/php /usr/bin/php
#任何地方都可以使用php命令

 

五、启动,测试 PHP

/data/www/default/ 创建一个 index.php 文件,写上 phpinfo(),重启 httpd 服务,能看到服务器的各种信息表示 PHP 安装成功。

cat > /data/www/default/index.php << EOF
<?php phpinfo(); ?>
EOF
#创建一个index.php文件,里面是phpinfo()函数。

/etc/init.d/httpd restart
#重启Apache服务

访问你的网站的 IP,如果出现下图样式,则表示 LAMP 安装成功。

phpinfo()
phpinfo()

注意:检查完 PHP 的信息后请立即删除当前 index.php 文件!!

 

到此为止,整个 LAMP 的搭建就完成了。有疑问请留言= =

 

相关文章:《编译安装LAMP:Apache篇》《编译安装LAMP:MySQL篇》

本文的安装方法结合了 http://teddysun.com/lamp 的方法。


原创文章,转载请以链接形式注明出处:http://blog.ttionya.com/article-503.html