从跨版本升级PHP说CENTOS的软件安装

更新记录

20160622-初次成文

为什么会有这篇文章

最近帮亲戚改一个PHP的系统,需要PHP版本 > 5.4.0,发现自己的阿里云是5.3.29,然后升级过程稍微有点曲折,就在这里开个帖子,总结一下。

我的系统是CENTOS 6.5 64位,采用php -v看到的版本是5.3.29,使用rpm -qa | grep php,显示的结果为空,这说明我的PHP是通过编译安装,而不是通过 RPM 或者 YUM 安装的。

这里正好多说两句,关于LINUX系统下安装程序的2种方法。参考了下面几篇帖子总结而成。

  1. Linux源码包编译安装与rpm安装方法介绍
  2. 安装 RPM 包或者安装源码包
  3. Redhat/CentOS 软件安装之RPM和YUM

Linux下安装程序的2种方式

源程序编译安装

如果是下载源程序编译安装到LINUX系统上,首先需要注意阅读随源程序一起的README文件或者INSTALL文件说明。其实,在Linux下面安装一个源码包是最常用的,日常工作中大部分软件都是通过源码安装的。安装一个源码包,需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外,还可以定制相关的功能,因为源码包在编译的时候可以附加额外的选项。

源码包的编译用到了Linux系统内的编译器,常见的源码包一般都是用C语言开发的,这也是因为C语言为Linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。所以如果你的机器上没有安装gcc就没有办法去编译源码。你可以使用 yum install -y gcc 来完成安装。

安装一个源码包,通常需要三个步骤:

  1. 配置 ./config 配置程序参数,指定程序安装目录之类的。
  2. 编译 make 使用这个命令会根据Makefile文件中预设的参数进行编译,这一步是gcc在工作。
  3. 安装 make install 安装步骤,生成相关的软件存放目录和配置文件的过程。

上面介绍的3步并不是所有的源码包软件都一样的,也就是说源码包的安装并非具有一定的标准安装步骤。这就需要你拿到源码包解压后,然后进入到目录找相关的帮助文档,通常会以INSTALL或者README为文件名。下面详细说一下每个步骤。

配置

构建应用的第一步就是通过ROOT用户执行 configure 脚本,该脚本位于程式源文件的主目录下:

1
./configure

该脚本将扫描检测系统,以确保程式所需的所有库文件已存在,并做好文件路径及其他所需的设置工作。如果程式所需的库文件不完全,该设置脚本就会退出,并告诉你还需要哪些库文件或是哪些版本太旧需要更新。

如果遇见这种情况,仅弄到含有该库文件的软件包还是不够的,同时还要找到具有该库文件所有头文件的研发包,在Linux中,这样的包一般以 -dev 作为文件名的结尾。

安装好所有需要的库文件后,重新运行设置脚本,直到没有错误提示为止,这说明需要的库文件已全部安装妥当了即满足了依赖关系,然后才会生成一个Makefile文件。

同时,在配置这一步可以定制功能,加上相应的选项即可,具有有什么选项可以通过 ./config --help 命令来查看。

编译

当设置脚本成功退出后,接下来要做的就是编译代码了。具体操作为在源文件的主目录中运行 make 命令:

1
make

注:这时,你会看到一串编译输出数据迅速从屏幕上滚过,如果正常的话,系统会返回的提示符状态。

安装

当软件成功编译后,最后一步就是将他们安装到系统上。大部分程式的 makefile 文件中都会有一个用于安装的函数。需要注意的是,大多时候我们必须作为root用户来安装程式,这样程式就把文件安装到 /usr 或其他只有终极用户才有写权限的目录中。依旧是在源文件的主目录下,执行如下命令:

1
make install

注:这样程序就会安装到你的计算机上了。

卸载

另外,当你不再使用该程序时,能使用软件所带的卸载功能,一般程序都会具有此功能。转换至源文件的主目录下,执行以下命令即可:

1
make uninstall

调整参数

多数情况下,利用上面介绍的方法安装的程式,都位于 /usr/local 下面,编译安装源码包还有一个特点,就是我们可以自己指定安装位置,这需要在配置时指定程序具体安装到哪个文件夹,通常我们会装在 /opt 下,命令如下:

1
./configure --prefix = /opt/

注:当然有时候也有例外,有些程序根本就不理会你指定的文件夹,它会自己指定文件夹进行安装。 

RPM 包安装(含YUM)

编译安装的PHP 5.3版本的卸载

因为我的安装方式是编译安装,所以在rpm -qa | grep php是没有显示结果的。

所以,只能通过删除PHP目录,或者重命令的方式来卸载掉老版本的PHP,需要注意的是,PHP在5.4版本之后,内存中的程序,改名叫php-fpm,而不再是单纯的php了。

而我装的5.3.29的PHP,则没有这个东西,也没有安装NGINX,所以,还是很简单的。

1
2
3
4
/etc/init.d/httpd #停掉httpd服务,也就是顺便停止了PHP解析
killall httpd #杀掉httpd相关的进程
mv /alidata/server/php-5.3.29 /alidata/server/php-5.3.29-old #不删掉目录,只改名字
rm -f php #删掉php和php-5.3.29的软链接

这样就算把php 5.3.29暂时搞没了,是不是很简单?

下面开始安装新版本了。

编译安装PHP 5.5.7

我的apache版本是2.4.10,最高支持PHP到5.5.7,我使用了一个在apache下安装php的脚本,地址在我的github下有源文件,具体请移步这里下载。

下来了sh脚本之后,执行下列命令

1
scp -P 22 ./install-.sh root@server:/alidata/server/.

登录服务器

1
2
3
4
cd /alidata/server
mkdir php-5.5.7
ln -s php-5.5.7 php
./install.sh

执行完之后,测试下网站,如果不放心,可以通过service httpd restart重启下apache。

有一些权限问题,直接登录后 chmod 777 .给相应的权限,顺利解决。

参考资料

在CentOS上把PHP从5.4升级到5.5:比较详细的介绍了使用yum安装php 5.4.13的过程

分享到