在CentOS上把PHP从5.4升级到5.5

摘要:本文记录了在CentOS 6.3上,把PHP从5.4.8升级到5.5.13的过程。

1. 概述

在我做的一个项目中,最近我对生产服务器上的一系列系统软件进行了升级,包括Git、Nginx、MySQL和PHP。这篇文章讲的是升级PHP的过程,其他软件的升级,可见下面列出的文章。

在我加入这个项目之前,服务器上的PHP已经安装设置好了,我只是正常使用而已。现在过去1年了,所有的开发工作都告一段落,有时间升级服务器上的软件了。升级这种事情是应当经常做的,倒不是为了追最新版本,而是当正式版本发放出来的时候,应该及时更新, 以便获得最新的更正、补丁,避免服务器上的漏洞,减少安全隐患。

升级是在今年6月13-14日进行的,到今天才有空做个记录,便于日后参考。

2. 计划

计划就是预案,就是事先的准备(包括心理上的)、更明细的步骤、对各种情况及对意外的对策,当然,我们不可能面面俱到,预测一切,不然就成神了,所以要随时准备脱稿演出,think out of the box。

2.1 了解情况

计划要有针对性,所以要先”踩点儿“。

通过在系统上,用find之类的命令,或者通过网页用phpinfo()函数来显示关于PHP的信息,可以找到PHP安装在/usr/local/php目录下。这说明PHP是从源代码编译安装的,因为yum和rpm是不会安装到/usr/local/php这个路径的。在QQ群友的提示下,找到PHP 5.4.8的源代码位于/usr/local/src/php-5.4.8目录中,进一步确认PHP是从源代码编译安装的。

查看PHP版本:

# /usr/local/php/bin/php -v
PHP 5.4. (cli) (built: Nov ::)
Copyright (c) - The PHP Group
Zend Engine v2.4.0, Copyright (c) - Zend Tehnologies

再查看PHP-FPM的运行情况。那两天看文档,我才知道有PHP-FPM(FastCGI Process Manager)这么个东西,在5.4之后已经包括在PHP之中了,详见参考资料[]13][14]。

查看PHP-FPM使用的端口:

# netstat -ntpul | grep php-fpm
tcp 127.0.0.1: 0.0.0.0:* LISTEN /php-fpm

查看PHP-FPM的进程:

# ps aux | grep php-fpm
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 0.0 0.2 ? Ss : php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 0.0 1.4 ? S : : php-fpm: pool www
www 0.0 1.4 ? S : : php-fpm: pool www
www 0.0 1.4 ? S : : php-fpm: pool www
root 0.0 0.0 pts/ S+ : : grep php-fpm

查看PHP-FPM的版本:

# /usr/local/php/sbin/php-fpm -v
PHP 5.4. (fpm-fcgi) (built: Nov ::)
Copyright (c) - The PHP Group
Zend Engine v2.4.0, Copyright (c) - Zend Technologies

查看上次系统启动的时间,这是怕安装的东西没重启而没有生效:

# who -b
system boot -- :
# last reboot
reboot system boot 2.6.-279.14.. Fri Jan : - : (+:)
reboot system boot 2.6.-220.13.. Mon Nov : - : (+:)
reboot system boot 2.6.-220.13.. Thu May : - : (:)
reboot system boot 2.6.-220.13.. Wed May : - : (:)
reboot system boot 2.6.-220.13.. Wed May : - : (:)
reboot system boot 2.6.-220.13.. Wed May : - : (:)
reboot system boot 2.6.-220.13.. Thu May : - : (:)
reboot system boot 2.6.-220.13.. Fri May : - : (-:-)
reboot system boot 2.6.-220.13.. Fri Apr : - : (+:)
reboot system boot 2.6.-220.13.. Sat Apr : - : (+:)
reboot system boot 2.6.-220.13.. Fri Apr : - : (+:)
reboot system boot 2.6.-220.13.. Thu Apr : - : (:)

其实这种担心是多余的,因为Linux和Windows不一样,基本上新安装的东西,都有命令行可以重启,只要你知道相应的命令行,不需要重启整个系统。

小结,现有的PHP 5.4.8安装在/usr/local/php目录下,是编译安装的,源代码位于/usr/local/src/php-5.4.8目录中。编译安装的好处是,可以自己定制,增减PHP扩展等等。建议,如无必要,不要使用编译安装,因为这样的安装,操作麻烦,对操作者的要求比较高,又无法利用yum和rpm这样的工具,不便于升级、卸载。

这也是为什么我用yum update php命令无法直接升级PHP的原因,因为yum或者rpm根本不知道用源代码编译安装的PHP。下面是我尝试的结果:

# yum update php
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors..com
* epel: mirrors.hust.edu.cn
* extras: mirrors..com
* remi: mirrors.hustunique.com
* remi-php55: mirrors.hustunique.com
* updates: mirrors..com
Setting up Update Process
Package(s) php available, but not installed.
No Packages marked for Update

可见,yum没有找到已经安装的php包,所以没什么可以升级的。孤独的编译安装,没人待见,看来要在角落里终老一生了。

2.2 确定计划

经过在几个CakePHP、PHP相关的QQ群里,向其他朋友的请教和讨论,(此处略去15000字),其实这是和上面的”踩点儿“互相掺杂在一起进行的。在这里要特别感谢CakePHP群中的Christian和严谨的PHP HHVM MySQL群中的Linux 管理员(Freax)两位朋友。最终在朋友们的帮助下形成了下面的计划要点:

  • 保留原有编译安装的PHP 5.4.8,没必要去动它,不用就是了
  • 用yum安装PHP 5.5.13,配置PHP-FPM 5.5.13使用另一个端口(比如9001)
  • 修改Nginx的配置,使用在新端口上的PHP-FPM 5.5.13
  • 如何重启PHP-FPM?
    答:php-fpm在5.4以后默认是二进制文件了,不再用service php-fpm start这种启动了。可以在/etc/rc.local (link to /etc/rc.d/rc.local) 加上这条命令

前期的调研、计划,花了差不多2天时间,而之后的安装、配置,也就用了3-4个小时。

3. 安装、配置PHP 5.5.13

根据这两天读的文档,确定使用remi安装库,使用yum来安装PHP 5.5.13。

3.1 添加remi安装库

下面的操作依据参考资料[4]:

# wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-*.rpm epel-release-*.rpm

3.2 用yum安装PHP 5.5.13

从之前PHP 5.4.8下phpinfo()的输出,知道了旧的PHP 5.4.8上安装的PHP扩展,这样确定了下面需要安装的包(命令yum install之后的参数):

# yum install php php-fpm php-gd php-mysqlnd php-mcrypt php-mbstring php-pdo
Dependencies Resolved ================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
libjpeg-turbo x86_64 1.2.-.el6_5 updates k
replacing libjpeg.x86_64 6b-.el6
libjpeg-turbo-devel x86_64 1.2.-.el6_5 updates k
replacing libjpeg-devel.x86_64 6b-.el6
php x86_64 5.5.-.el6.remi remi-php55 2.6 M
php-fpm x86_64 5.5.-.el6.remi remi-php55 1.3 M
php-gd x86_64 5.5.-.el6.remi remi-php55 k
php-mbstring x86_64 5.5.-.el6.remi remi-php55 k
php-mcrypt x86_64 5.5.-.el6.remi remi-php55 k
php-mysqlnd x86_64 5.5.-.el6.remi remi-php55 k
php-pdo x86_64 5.5.-.el6.remi remi-php55 k
Installing for dependencies:
apr-util-ldap x86_64 1.3.-.el6_0. base k
fontconfig x86_64 2.8.-.el6 base k
gd-last x86_64 2.1.-.el6.remi remi k
httpd x86_64 2.2.-.el6.centos updates k
httpd-tools x86_64 2.2.-.el6.centos updates k
libX11 x86_64 1.5.-.el6 base k
libX11-common noarch 1.5.-.el6 base k
libXau x86_64 1.0.-.el6 base k
libXpm x86_64 3.5.-.el6 base k
libmcrypt x86_64 2.5.-.el6 epel k
libtiff x86_64 3.9.-.el6_5 updates k
libxcb x86_64 1.8.-.el6 base k
libxslt x86_64 1.1.-.el6_3. base k
mailcap noarch 2.1.-.el6 base k
php-cli x86_64 5.5.-.el6.remi remi-php55 2.5 M
php-common x86_64 5.5.-.el6.remi remi-php55 1.0 M
php-pear noarch :1.9.-.el6.remi remi k
php-pecl-jsonc x86_64 1.3.-.el6.remi.5.5 remi-php55 k
php-pecl-zip x86_64 1.12.-.el6.remi.5.5 remi-php55 k
php-process x86_64 5.5.-.el6.remi remi-php55 k
php-xml x86_64 5.5.-.el6.remi remi-php55 k
t1lib x86_64 5.1.-.el6_2. base k Transaction Summary
================================================================================
Install Package(s)

yum自动计算出需要的依赖安装包,总共有31个安装包需要下载、安装。

下面询问是否继续下载,回答y,并按回车即可继续:

Total download size:  M
Is this ok [y/N]: y
Downloading Packages:
(/): apr-util-ldap-1.3.-.el6_0..x86_64.rpm | kB :
(/): fontconfig-2.8.-.el6.x86_64.rpm | kB :
(/): gd-last-2.1.-.el6.remi.x86_64.rpm | kB :
(/): httpd-2.2.-.el6.centos.x86_64.rpm | kB :
(/): httpd-tools-2.2.-.el6.centos.x86_64.rpm | kB :
(/): libX11-1.5.-.el6.x86_64.rpm | kB :
(/): libX11-common-1.5.-.el6.noarch.rpm | kB :
(/): libXau-1.0.-.el6.x86_64.rpm | kB :
(/): libXpm-3.5.-.el6.x86_64.rpm | kB :
(/): libjpeg-turbo-1.2.-.el6_5.x86_64.rpm | kB :
(/): libjpeg-turbo-devel-1.2.-.el6_5.x86_64.rpm | kB :
(/): libmcrypt-2.5.-.el6.x86_64.rpm | kB :
(/): libtiff-3.9.-.el6_5.x86_64.rpm | kB :
(/): libxcb-1.8.-.el6.x86_64.rpm | kB :
(/): libxslt-1.1.-.el6_3..x86_64.rpm | kB :
(/): mailcap-2.1.-.el6.noarch.rpm | kB :
(/): php-5.5.-.el6.remi.x86_64.rpm | 2.6 MB :
(/): php-cli-5.5.-.el6.remi.x86_64.rpm | 2.5 MB :
(/): php-common-5.5.-.el6.remi.x86_64.rpm | 1.0 MB :
(/): php-fpm-5.5.-.el6.remi.x86_64.rpm | 1.3 MB :
(/): php-gd-5.5.-.el6.remi.x86_64.rpm | kB :
(/): php-mbstring-5.5.-.el6.remi.x86_64.rpm | kB :
(/): php-mcrypt-5.5.-.el6.remi.x86_64.rpm | kB :
(/): php-mysqlnd-5.5.-.el6.remi.x86_64.rpm | kB :
(/): php-pdo-5.5.-.el6.remi.x86_64.rpm | kB :
(/): php-pear-1.9.-.el6.remi.noarch.rpm | kB :
(/): php-pecl-jsonc-1.3.-.el6.remi.5.5.x86_64.rpm | kB :
(/): php-pecl-zip-1.12.-.el6.remi.5.5.x86_64.rpm | kB :
(/): php-process-5.5.-.el6.remi.x86_64.rpm | kB :
(/): php-xml-5.5.-.el6.remi.x86_64.rpm | kB :
(/): t1lib-5.1.-.el6_2..x86_64.rpm | kB :
--------------------------------------------------------------------------------
Total 3.6 MB/s | MB :

之后还有一些Is this ok [y/N]:的问题,一律回答y。经过一轮问答和安装,最后完成时的小结为:

Installed:
libjpeg-turbo.x86_64 :1.2.-.el6_5
libjpeg-turbo-devel.x86_64 :1.2.-.el6_5
php.x86_64 :5.5.-.el6.remi
php-fpm.x86_64 :5.5.-.el6.remi
php-gd.x86_64 :5.5.-.el6.remi
php-mbstring.x86_64 :5.5.-.el6.remi
php-mcrypt.x86_64 :5.5.-.el6.remi
php-mysqlnd.x86_64 :5.5.-.el6.remi
php-pdo.x86_64 :5.5.-.el6.remi Dependency Installed:
apr-util-ldap.x86_64 :1.3.-.el6_0.
fontconfig.x86_64 :2.8.-.el6
gd-last.x86_64 :2.1.-.el6.remi
httpd.x86_64 :2.2.-.el6.centos
httpd-tools.x86_64 :2.2.-.el6.centos
libX11.x86_64 :1.5.-.el6
libX11-common.noarch :1.5.-.el6
libXau.x86_64 :1.0.-.el6
libXpm.x86_64 :3.5.-.el6
libmcrypt.x86_64 :2.5.-.el6
libtiff.x86_64 :3.9.-.el6_5
libxcb.x86_64 :1.8.-.el6
libxslt.x86_64 :1.1.-.el6_3.
mailcap.noarch :2.1.-.el6
php-cli.x86_64 :5.5.-.el6.remi
php-common.x86_64 :5.5.-.el6.remi
php-pear.noarch :1.9.-.el6.remi
php-pecl-jsonc.x86_64 :1.3.-.el6.remi.5.5
php-pecl-zip.x86_64 :1.12.-.el6.remi.5.5
php-process.x86_64 :5.5.-.el6.remi
php-xml.x86_64 :5.5.-.el6.remi
t1lib.x86_64 :5.1.-.el6_2. Replaced:
libjpeg.x86_64 :6b-.el6 libjpeg-devel.x86_64 :6b-.el6 Complete!

3.3 配置PHP-FPM的启动

因为使用yum安装,安装过程已经拷贝好了PHP-FPM的服务daemon,只需确保PHP-FPM服务能在系统重启时自动启动就行了:

# chkconfig php-fpm on

查看PHP-FPM服务的自启动状态:

# chkconfig --list php-fpm
php-fpm :off :off :on :on :on :on :off

正确。

3.4 停止PHP-FPM 5.4.8

查看PHP-FPM 5.4.8的进程:

# ps aux | grep php-fpm
root 0.0 0.1 ? Ss : php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 0.0 1.4 ? S : : php-fpm: pool www
www 0.0 1.5 ? S : : php-fpm: pool www
www 0.0 1.3 ? S : : php-fpm: pool www
root 0.0 0.0 pts/ S+ : : grep php-fpm

可见,当前PHP-FPM 5.54.8进程的进程号(pid)是2881,注意其使用的配置文件/usr/local/php/etc/php-fpm.conf位于编译安装PHP的目录,证实了这是PHP-FPM 5.54.8进程。其余进程为其子进程,而grep php-fpm是查看进程这个命令的进程。

中断PHP-FPM 5.54.8进程:

# kill -TERM 

再次查看PHP-FPM的进程:

# ps aux | grep php-fpm
root 0.0 0.0 pts/ S+ : : grep php-fpm

已经没有PHP-FPM的进程了,唯一剩下的grep php-fpm是查看进程这个命令的进程。

3.5 启动PHP-FPM 5.5.13

PHP-FPM的配置,我遵照的是参考资料[10],这是一个分级结构的配置文件,多个配置文件各司其职,便于更换配置,启用、停止配置的各模块也更容易。

启动php-fpm服务:

# service php-fpm start
Starting php-fpm: [ OK ]

顺利启动。

再查看其进程:

# ps aux | grep php-fpm
root 0.0 0.5 ? Ss : : php-fpm: master process (/etc/php-fpm.conf)
apache 0.4 1.1 ? S : : php-fpm: pool www
apache 0.3 1.5 ? S : : php-fpm: pool www
apache 0.4 1.6 ? S : : php-fpm: pool www
apache 0.4 1.5 ? S : : php-fpm: pool www
apache 0.3 1.3 ? S : : php-fpm: pool www
apache 0.3 1.3 ? S : : php-fpm: pool www
apache 0.1 0.7 ? S : : php-fpm: pool www
root 0.0 0.0 pts/ S+ : : grep php-fpm

可见其进程号为20099,其余进程为其子进程,而grep php-fpm是查看进程这个命令的进程。

3.6 问题:数据库的图像文件没有显示

原因:PHP-FPM子进程的所有者:组是apache,而不是www。而Nginx是运行在www用户下,故应当改为www。

编辑/etc/php-fpm.d/www.conf:

[www]
;user = apache
user = www
;group = apache
group = www

再重启php-fpm服务:

# service php-fpm stop
Stopping php-fpm: [ OK ]
# service php-fpm start
Starting php-fpm: [ OK ]

查看php-fpm进程:

# ps aux | grep php-fpm
root 0.0 0.5 ? Ss : : php-fpm: master process (/etc/php-fpm.conf)
www 0.4 1.0 ? S : : php-fpm: pool www
www 0.3 0.9 ? S : : php-fpm: pool www
www 0.4 1.0 ? S : : php-fpm: pool www
www 0.4 1.0 ? S : : php-fpm: pool www
www 0.0 0.4 ? S : : php-fpm: pool www
www 0.0 0.4 ? S : : php-fpm: pool www
root 0.0 0.0 pts/ S+ : : grep php-fpm

可以看到PHP-FPM进程的进程号是20208,其子进程都以www用户身份运行,而grep php-fpm是查看进程这个命令的进程。

3.7 问题:登录总是失败,并重新返回到登录页面

错误日志为:

2014-06-14 23:14:36 Warning: Warning (2): Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in [Unknown, line 0]

原因:PHP session目录的所有者:组是apache:apache,而不是www:www,与实际进程运行的用户身份不符。

更改PHP session目录的所有者:组为www:www:

# chown -R www:www /var/lib/php/session

从此,王子和公主过着没羞没臊的生活!

A. 参考资料

  1. Upgrading PHP on CentOS 6.5 (Final)
    http://stackoverflow.com/questions/21502656/upgrading-php-on-centos-6-5-final
  2. Upgrading PHP 5.3.3 to 5.4.4 in CentOS 6.4
    http://superuser.com/questions/615401/upgrading-php-5-3-3-to-5-4-4-in-centos-6-4
  3. How to Upgrade PHP to 5.4.10 on CentOS 6.3
    http://serverfault.com/questions/466394/how-to-upgrade-php-to-5-4-10-on-centos-6-3
  4. Repository Configuration - Les RPM de Remi
    http://blog.famillecollet.com/pages/Config-en
  5. Basic Yum Commands and how to use them
    http://yum.baseurl.org/wiki/YumCommands
  6. How do I upgrade to the latest PHP version in CentOS with yum?
    http://serverfault.com/questions/456968/how-do-i-upgrade-to-the-latest-php-version-in-centos-with-yum
    尽管这是从PHP 5.3升级到5.4,不过这是使用Remi安装库。
  7. Setting Up PHP behind Nginx with FastCGI
    http://www.sitepoint.com/setting-up-php-behind-nginx-with-fastcgi/
  8. Running multiple PHP versions is so easy with FastCGI
    http://www.ondrejsimek.com/blog/running-multiple-php-versions-is-so-easy-with-fastcgi/
  9. Build PHP 5.4 on CentOS 6.2
    http://benramsey.com/blog/2012/03/build-php-54-on-centos-62/
    这是关于如何从源代码编译、构建、安装PHP 5.4的。
  10. A better way to run PHP-FPM
    http://mattiasgeniar.be/2014/04/09/a-better-way-to-run-php-fpm/
  11. Install Nginx, PHP 5.5 and FastCGI on CentOS 6
    http://geekpeek.net/install-nginx-php55-fastcgi/
  12. Nginx and PHP-FPM Configuration and Optimizing Tips and Tricks
    http://www.if-not-true-then-false.com/2011/nginx-and-php-fpm-configuration-and-optimizing-tips-and-tricks/
  13. Home - PHP-FPM
    http://php-fpm.org/
  14. PHP: FastCGI Process Manager (FPM) - Manual
    http://php.net/manual/en/install.fpm.php

在CentOS上把PHP从5.4升级到5.5的更多相关文章

  1. 在CentOS上把MySQL从5.5升级到5.6(转)

    http://www.th7.cn/db/mysql/201408/66064.shtml 在CentOS上把MySQL从5.5升级到5.6 摘要:本文记录了在CentOS 6.3上,把MySQL从5 ...

  2. 在CentOS上把MySQL从5.5升级到5.6

    在CentOS上把MySQL从5.5升级到5.6 摘要:本文记录了在CentOS 6.3上,把MySQL从5.5.28升级到5.6.19的过程. 1. 概述 在我做的一个项目中,最近我对生产服务器上的 ...

  3. 在CentOS上把Git从1.7.1升级到1.7.12.4

    在CentOS上把Git从1.7.1升级到1.7.12.4 摘要:本文记录了在CentOS 6.3上,把Git从1.7.1升级到1.7.12.4的过程. 1. 概述 在我做的一个项目中,最近我对生产服 ...

  4. 在CentOS上把Nginx从1.2.4升级到1.6.0

    在CentOS上升级把Nginx从1.2.4升级到1.6.0 摘要:本文记录了在CentOS 6.3上,把Nginx从1.2.4升级到1.6.0的过程. 1. 概述 在我做的一个项目中,最近我对生产服 ...

  5. .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序

    在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...

  6. NoSql1 在Linux(CentOS)上安装memcached及使用

    前言:       今天是初五,生活基本要从过年的节奏中回归到正常的生活了,所以想想也该想想与工作有关的事情了.我之前在工作中会经常使用memcached和redis,但是自己一直没有时间系统的好好看 ...

  7. 在Ubuntu|CentOS上安装Shutter截图工具及快捷键设置

    简介 Shutter前身叫GScrot,它是一款相当棒的截图软件. 通过Shutter,你可以截取包括选定区域.全屏幕.窗口.窗口内的控件甚至网页的图像.通过内置的强大插件机制,你可以在截图后,对图像 ...

  8. 在CentOS上安装rabbitmq-server

    ***在 CentOS 6.4上安装python*** 注意啊,自己手动安装python2.7.5,不要动系统上面其他的版本 1,先安装GCC,用如下命令yum install gcc gcc-c++ ...

  9. CentOS上安装软件错误提示:configure: error: no acceptable C compiler found in $PATH

    CentOS上安装软件错误提示:configure: error: no acceptable C compiler found in $PATH 因为是centos linux,默认可以采用yum方 ...

随机推荐

  1. 牛客网练习赛25 C 再编号

    链接:https://www.nowcoder.com/acm/contest/158/C来源:牛客网 定义对 a 的再编号为 a' ,满足 . 现在有 m 次询问,每次给定 x,t ,表示询问经过 ...

  2. rails使用bootstrap

    在Gemfile文件中添加'bootstrap-sass',再运行bundle install gem 'bootstrap-sass' 在config/application.rb添加一行代码,让b ...

  3. 条款12:复制对象时勿忘其每一个成分(Copy all parts of an object)

    NOTE: 1.Copying 函数应该确保复制“对象内的所有成员变量”及“所有base class成分”. 2.不要尝试以某个copying函数实现另一个copying函数.应该将共同机能放进第三个 ...

  4. SpringMVC中的几种事务管理器

    转载https://blog.csdn.net/qq_26222859/article/details/52032853 1JDBC及iBATIS.MyBatis框架事务管理器 <bean id ...

  5. 激活windows10(已更新工具)

    激活windows10 1.用cmd命令: 自己动手,KMS激活win10 2016 长期服务版.步骤如下:命令提示符(管理员),依次输入以下3条命令 slmgr /ipk DCPHK-NFMTC-H ...

  6. 负载均衡之Ocelot+Consul(配置文件注册服务)

    继上篇 Ocellot 做负载均衡之后,本篇将记录 Ocelot + Consul 试验如何做服务发现和服务注册. 服务发现和服务注册的背景知识,一搜满街都是. 在此,我还是写下自己对这个术语的理解吧 ...

  7. centos的那些小事儿!

    操作系统:centos7 1.[root@chaoge ~]# ifconfig-bash: ifconfig: 未找到命令 安装net-tools即可: [root@chaoge ~]# yum i ...

  8. 倍增法求LCA

    倍增法求LCA LCA(Least Common Ancestors)的意思是最近公共祖先,即在一棵树中,找出两节点最近的公共祖先. 倍增法是通过一个数组来实现直接找到一个节点的某个祖先,这样我们就可 ...

  9. bzoj1086 [SCOI2005]王室联邦 树分块

    [bzoj1086][SCOI2005]王室联邦 2014年11月14日2,6590 Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的 ...

  10. 【HDOJ6304】Chiaki Sequence Revisited(数学)

    题意:给定一个序列a,定义a[1]=a[2]=1,a[n]=a[n-a[n-1]]+a[n-1-a[n-2]](n>=3),求该序列的前n项和是多少,结果对 1e9+7 取模 n<=1e1 ...