APACHE环境下PHP 5.3.3升级到5.6

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值