前面编译安装完成了 Apache 和 MySQL,Apache 的编译安装以及需要的系统之类的见《编译安装 LAMP:Apache 篇》,MySQL 的编译安装见《编译安装 LAMP:MySQL 篇》,最后我们要进行 PHP 的编译安装。
已更新 PHP 7.0.X 版本编译选项——20160115


一、用 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 可以使用除了自带的几种加密函数外功能更全面的 mhash
和 mcrypt
。该模块在默认情况下不开启,所以 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 交换分区》。Bash# 这里对 64 位系统拷贝文件,为了支持 ldap if [ `getconf WORD_BIT` = '32' ] && [ `getconf LONG_BIT` = '64' ] ; then cp -frp /usr/lib64/libldap* /usr/lib fi # 为了支持 imap 链接 lib64 的文件到 lib ln -s /usr/lib64/libc-client.so /usr/lib/libc-client.so
PHP 5 编译选项,点击展开:
# 安装 PHP 5 看这里
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 线程数 可以使用多线程编译
# PHP 5.5 安装完成
PHP 7 编译选项,点击展开:
# 安装 PHP 7 看这里
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 线程数 可以使用多线程编译
# PHP 7 安装完成
mkdir -p /usr/local/php/etc
# 拷贝配置文件到指定位置
cp php.ini-production /usr/local/php/etc/php.ini
更多关于编译参数的内容,请移步《PHP 5.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,全复制下来黏贴就行。
# 以下配置了 php.ini 部分
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 的 OPCache 部分
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 命令
ln -s /usr/local/php/bin/php /usr/bin/php
五、启动,测试 PHP
在 /data/www/default/
创建一个 index.php
文件,写上 phpinfo()
,重启 httpd 服务,能看到服务器的各种信息表示 PHP 安装成功。
# 创建一个 index.php 文件,里面是 phpinfo() 函数
cat > /data/www/default/index.php << EOF
<?php phpinfo(); ?>
EOF
# 重启 Apache 服务
/etc/init.d/httpd restart
访问你的网站的 IP,如果出现下图样式,则表示 LAMP 安装成功。
注意:检查完 PHP 的信息后请立即删除当前 index.php 文件!!
到此为止,整个 LAMP 的搭建就完成了。有疑问请留言= =
相关文章:《编译安装 LAMP:Apache 篇》、《编译安装 LAMP:MySQL 篇》
本文的安装方法结合了 https://teddysun.com/410.html 的方法。
原创文章,转载请以链接形式注明出处:https://blog.ttionya.com/article-503.html