以下所有命令我都是在root下进行的,所以没有sudo
1、下载php5.4源码,http://cn2.php.net/distributions/php-5.4.45.tar.gz
2、安装必须的包
apt-get install gcc libxml2-devel make automake autoconf libtool bison flex
3、tar -zxvf php-5.4.45.tar.gz
清除原来的配置
./buildconf –force
建立新的配置
./configure --prefix=/usr/share/php5.4 --with-config-file-path=/etc/php/5.4 --with-curl --with-pear --with-gd --with-jpeg-dir --with-png-dir --with-zlib --with-xpm-dir --with-freetype-dir --with-mcrypt --with-mhash --with-mysql --with-mysqli --enable-pdo --with-pdo-mysql --with-openssl --with-xmlrpc --with-xsl --with-gettext --with-fpm-user=www-data --with-fpm-group=www-data --enable-fpm --enable-exif --enable-wddx --enable-zip --enable-bcmath --with-bz2 --enable-calendar --enable-ftp --enable-mbstring --enable-soap --enable-sockets --enable-shmop --enable-dba --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-debug --enable-maintainer-zts --enable-embed
注:--prefix=为php的安装目录
编译
make
编译安装
make install
编译过程假如失败
make clean
在编译过程中缺少的一些其他的包可以通过apt-get install的方式自行安装,百度一下基本都没太大问题,
以下2个错误比较蛋疼,这里记录一下
错误 Cannot find OpenSSL's
安装下面包
apt-get install libxml2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libxpm-dev libmysqlclient-dev libpq-dev libicu-dev libfreetype6-dev libldap2-dev libxslt-dev
apt-get install libssl-dev libsslcommon2-dev
错误:configure: error: libXpm.(a|so) not found.
安装下面的包
apt-get install libxpm-dev
如果还是如下错误:
configure: error: libXpm.(a|so) not found.
不是你缺少东西了,输入如下命令帮编译程序找到相关文件!
cd /usr/lib/
64位的OS
ln -s /usr/lib/x86_64-linux-gnu/libXpm.a
ln -s /usr/lib/x86_64-linux-gnu/libXpm.so
ln -s /usr/lib/x86_64-linux-gnu/libXpm.so.4
ln -s /usr/lib/x86_64-linux-gnu/libXpm.so.4.11.0
32位的OS
ln -s /usr/lib/i386-linux-gnu/libXpm.a
ln -s /usr/lib/i386-linux-gnu/libXpm.so
ln -s /usr/lib/i386-linux-gnu/libXpm.so.4
ln -s /usr/lib/i386-linux-gnu/libXpm.so.4.11.0
错误:cp: cannot stat `sapi/cli/php.1′: No such file or directory
重新开始,貌似是php的一个bug,https://bugs.php.net/bug.php?id=67888
安装完毕记得要把安装目录下的etc/php.ini下的文件复制到/etc/php/5.4/php.ini这里,方便以后修改配置
mkdir /etc/php/5.4
cp /usr/share/php5.4/etc/php.ini /etc/php/5.4/
我因为是和nginx一起使用,所以使用php-fpm的形式加载php,蛋疼的问题又出现一个,比如php5.4及以后的php-fpm不支持命令行的形式restart或者reload,但是发现可以通过kill -USR2的信号来实现reload,所以自己写了一个命令来实现reload
ps -ef | grep php-fpm | grep master | cut -c 9-15 | xargs kill -USR2
可以把这个命令保存在文件里执行,别忘了#!/bin/bash 并且注意添加执行权限
对于编译安装的php在安装扩展上比较蛋疼,目前php扩展有3种形式,
第一种php内置了,在编译php的时候./configure的时候带上就可以了,大家可以看php的官方文档上有介绍,具体的参数官方文档上都有
第二种通过pear或者pecl安装,pear或者pecl在php的安装目录的bin目录下,包括php-config还有phpize,php-config在安装某些扩展的时候会提示没有找到php-config文件,
可以通过--with-php-config=/usr/share/php5.4/bin/php-config 参数来执行php-config的位置,
第三种就是扩展的源码编译了,扩展的源码编译主要使用phpize,以下以xdebug为主示范一下,
下载xdebug源码:https://xdebug.org/files/xdebug-2.4.1.tgz
因为能适配php5.4的最高的xdebug只有2.4.1所以就下载2.4.1的
wget https://xdebug.org/files/xdebug-2.4.1.tgz
解压缩
tar -xvzf xdebug-2.3.2.tgz
进入源码目录
cd xdebug-2.3.2
源码解释
/usr/share/php5.4/bin/phpize
假如输出
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
代表成功了
然后
./configure
这一步会提示
Cannot find php-config. Please use --with-php-config=PATH
使用--with-php-config参数
./configure --with-php-config=/usr/share/php5.4/bin/php-config
这回一次成功
最后make 和make install
最后不要忘记修改php.ini文件