0. 环境
系统:CentOS release 6.8
Apache:2.2.15
PHP 5.3.3版本为YUM安装
1. 源码升级
1.1 安装步骤
无论是源码还是YUM升级,大致步骤都是先升级PHP,再检查安装部分扩展。本次源码安装过程各软件包的下载,解压缩过程略过。
1.移除5.3.3版本php
移除php所有包,使用 yum remove php-common 就能将所有相关包移除干净了,使用rpm -qa|grep php确认一下。
安装php扩展需要的包(根据实际情况灵活掌握,比如如果不需要snmp扩展,就不需要安装相关依赖包):
yum install -y httpd-devel libxslt-devel net-snmp-devel libicu-devel gcc-c++ gmp-devel bzip2-devel enchant-devel libcurl-devel libjpeg-turbo-devel libpng-devel freetype-devel
2.安装libmcrypt
mkdir /usr/local/libmcrypt/
./configure --prefix=/usr/local/libmcrypt
make && make install
3.安装5.6版本php
(1)mkdir /usr/local/php,同时使用whereis确认apxs的位置。
# whereis apxs
apxs: /usr/sbin/apxs /usr/share/man/man8/apxs.8.gz
(2)安装php 5.6版本
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php --enable-fpm --with-libxml-dir --with-zlib --with-curl --enable-dba --enable-ftp --with-freetype-dir --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --enable-gd-native-ttf --with-gettext --enable-mbstring --with-mcrypt=/usr/local/libmcrypt/ --with-mysql --with-mysqli --enable-pcntl --with-pdo-mysql --without-pdo-sqlite --enable-shmop --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-zip --with-apxs2=/usr/sbin/apxs --enable-bcmath --enable-soap --with-xsl --with-xmlrpc --enable-wddx --with-snmp --enable-intl --with-gmp --enable-exif --with-enchant --enable-calendar --with-bz2
make
make install
(3)cp /etc/php.ini.rpmsave /usr/local/lib/php.ini
(4)httpd.conf中添加如下命令,使apache可以解析php文件:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
4.安装扩展
(1)php-redis
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
(2)memcache-php
yum -y install libevent libevent-devel
/usr/local/php/bin/phpize
./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config
make && make install
(3)xcache
/usr/local/php/bin/phpize
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make&make install
(4)openssl
/usr/local/php/bin/phpize
./configure --with-openssl --with-php-config=/usr/local/php/bin/php-config
make&make install
(5)修改php.ini,添加扩展
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
extension=redis.so
extension=memcache.so
extension=xcache.so
extension=openssl.so
(6)重启httpd
httpd -t
/etc/init.d/httpd restart
1.2 注意事项
(1)php make可能会报如下错误:
/usr/local/src/php-5.6.23/ext/iconv/iconv.c:2607: undefined reference to `libiconv_open'
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] 错误 1
使用 make ZEND_EXTRA_LIBS=’-liconv’ 可以编译过去,但是究其原因,系统iconv库出现了问题。即使php正常安装,http服务也无法启动:
# /etc/init.d/httpd start
正在启动 httpd:httpd: Syntax error on line 216 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib64/httpd/modules/libphp5.so into server: /usr/lib64/httpd/modules/libphp5.so: undefined symbol: libiconv
[失败]
做了很多尝试,包括安装iconv库等等,最后发现iconv命令是由glibc-common包提供的,将该包升级(yum install -y glibc-common),问题解决;
(2)因为这里使用了--with-config-file-path,所以php.ini文件拷贝到指定的位置,默认位置是/usr/local/php/lib;
(3)--with-apxs2=/usr/sbin/apxs 是apache 2 专用的,重新编译安装可以重新生成libphp5.so模块,使apache使用新版本的php。
(4)php扩展安装完成,需要使用php -m查看一下是否成功安装。php --version也可以检查出扩展安装的问题:
# php --version
PHP Warning: PHP Startup: redis: Unable to initialize module
Module compiled with module API=20090626
PHP compiled with module API=20131226
上面的告警说明php-redis扩展的版本太低了,需要升级。
2. YUM升级
1.确认是否安装epel源
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
2.安装remi源
yum install https://rpms.remirepo.net/enterprise/remi-release-6.rpm
3.启用php5.6版本repo安装源
yum-config-manager --enable remi-php56
4.执行更新安装
yum install php
5.检查安装结果
php --version
php --modules
6.httpd重启,重新载入配置
/etc/init.d/httpd restart