RitoLabo

CentOS7のPHP7.1を7.2にアップグレードする[remi]

  • 公開:
  • カテゴリ: PHP
  • タグ: PHP,Linux,CentOS,7.2,7.1,remi,Upgrade,yum

2017年11月30日にPHP7.2がリリースされました。
PHP7.2の変更点
http://php.net/manual/ja/migration72.php

様々な変更点がありますが、総合的にPHP7.1よりも10%て程度高速化されたようです。

今回は、PHP7.1から7.2へアップグレードを行います。

アジェンダ
  1. 検証環境
  2. 現状把握
  3. PHPの削除
  4. PHP7.2インストール

検証環境

今回の検証環境は以下の通りです。

  • Linux CentOS 7.2
  • Apache 2.4
  • PHP 7.1

尚、PHPのインストールにはremiリポジトリを使用します。

現状把握

まずは現状把握から行っていきます。

現在のPHPのバージョンを確認します。

# PHPのバージョンを確認
php -v

# 実行結果
[demo@localhost sources]# php -v
PHP
7.1.13 (cli) (built: Jan 3 2018 11:00:58) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.13, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans

7.1.13なので、これを7.2にアップグレードする事になります。

ついでにインストールされているRPMパッケージの状態を確認しておきます。

# インストールされているRPMパッケージの状態を確認
rpm -qa | grep php

# 実行結果
[demo@localhost sources]# rpm -qa | grep php
php-symfony-console-2.8.32-1.el7.remi.noarch
php-symfony-security-acl-2.8.0-4.el7.remi.noarch
php-doctrine-orm-2.5.12-1.el7.remi.noarch
php-symfony-framework-bundle-2.8.32-1.el7.remi.noarch
php-symfony-security-bundle-2.8.32-1.el7.remi.noarch
php-phpunit-PHPUnit-5.7.26-1.el7.remi.noarch
php-devel-7.1.13-1.el7.remi.x86_64
php-opcache-7.1.13-1.el7.remi.x86_64
php-jsonlint-1.6.1-1.el7.noarch
php-justinrainbow-json-schema5-5.2.6-1.el7.noarch
php-common-7.1.13-1.el7.remi.x86_64
php-process-7.1.13-1.el7.remi.x86_64
php-symfony-class-loader-2.8.32-1.el7.remi.noarch
php-symfony-finder-2.8.32-1.el7.remi.noarch
php-symfony-stopwatch-2.8.32-1.el7.remi.noarch
php-sebastian-recursion-context-2.0.0-1.el7.remi.noarch
php-symfony-options-resolver-2.8.32-1.el7.remi.noarch
php-doctrine-collections-1.4.0-1.el7.remi.noarch
php-phpunit-diff-1.4.3-1.el7.remi.noarch
php-phpunit-PHP-Invoker-1.1.4-1.el7.remi.noarch
php-phpdocumentor-reflection-docblock-3.2.2-1.el7.remi.noarch
php-sebastian-code-unit-reverse-lookup-1.0.1-1.el7.remi.noarch
php-doctrine-inflector-1.1.0-4.el7.remi.noarch
php-bcmath-7.1.13-1.el7.remi.x86_64
php-symfony-config-2.8.32-1.el7.remi.noarch
php-phpunit-comparator-1.2.4-1.el7.1.noarch
php-Monolog-1.23.0-1.el7.remi.noarch
php-symfony-ldap-2.8.32-1.el7.remi.noarch
php-intl-7.1.13-1.el7.remi.x86_64
php-symfony-translation-2.8.32-1.el7.remi.noarch
php-symfony-var-dumper-2.8.32-1.el7.remi.noarch
php-symfony-event-dispatcher-2.8.32-1.el7.remi.noarch
php-symfony-form-2.8.32-1.el7.remi.noarch
php-symfony-security-2.8.32-1.el7.remi.noarch
php-doctrine-dbal-2.5.12-3.el7.remi.noarch
php-doctrine-datafixtures-1.0.2-5.el7.remi.noarch
php-symfony-doctrine-bridge-2.8.32-1.el7.remi.noarch
php-symfony-web-profiler-bundle-2.8.32-1.el7.remi.noarch
php-symfony-twig-bundle-2.8.32-1.el7.remi.noarch
php-symfony-swiftmailer-bridge-2.8.32-1.el7.remi.noarch
php-phpunit-Version-2.0.1-1.el7.remi.noarch
php-sebastian-global-state-1.1.1-1.el7.remi.noarch
php-mcrypt-7.1.13-1.el7.remi.x86_64
php-pear-1.10.5-4.el7.remi.noarch
php-pecl-zip-1.15.2-1.el7.remi.7.1.x86_64
php-pecl-xdebug-2.5.5-1.el7.remi.7.1.x86_64
php-seld-phar-utils-1.0.1-1.el7.noarch
php-composer-ca-bundle-1.0.2-1.el7.noarch
php-composer-semver-1.4.2-1.el7.noarch
php-json-7.1.13-1.el7.remi.x86_64
php-7.1.13-1.el7.remi.x86_64
php-fedora-autoloader-1.0.0-1.el7.remi.noarch
php-PsrLog-1.0.2-2.el7.remi.noarch
php-pdo-7.1.13-1.el7.remi.x86_64
php-symfony-common-2.8.32-1.el7.remi.noarch
php-symfony-yaml-2.8.32-1.el7.remi.noarch
php-symfony-property-access-2.8.32-1.el7.remi.noarch
php-symfony-process-2.8.32-1.el7.remi.noarch
php-symfony-filesystem-2.8.32-1.el7.remi.noarch
php-symfony-templating-2.8.32-1.el7.remi.noarch
php-doctrine-annotations-1.2.7-4.el7.remi.noarch
php-phpunit-exporter-2.0.0-1.el7.remi.noarch
php-symfony-css-selector-2.8.32-1.el7.remi.noarch
php-symfony-debug-2.8.32-1.el7.remi.noarch
php-phpunit-PHP-Timer-1.0.9-1.el7.remi.noarch
php-phpunit-File-Iterator-1.4.5-1.el7.remi.noarch
php-phpdocumentor-type-resolver-0.4.0-1.el7.remi.noarch
php-sebastian-object-enumerator-2.0.1-1.el7.remi.noarch
php-webmozart-assert-1.2.0-1.el7.remi.noarch
php-password-compat-1.0.4-1.el7.remi.noarch
php-sebastian-resource-operations-1.0.0-2.el7.remi.noarch
php-phpunit-PHP-TokenStream-1.4.12-1.el7.remi.noarch
php-phpdocumentor-reflection1-1.0.7-5.el7.remi.noarch
php-doctrine-common-2.7.2-1.el7.remi.noarch
php-xml-7.1.13-1.el7.remi.x86_64
php-symfony-dependency-injection-2.8.32-1.el7.remi.noarch
php-symfony-browser-kit-2.8.32-1.el7.remi.noarch
php-phpspec-prophecy-1.7.3-1.el7.remi.noarch
php-twig-1.35.0-1.el7.remi.7.1.noarch
php-paragonie-random-compat-2.0.11-1.el7.remi.noarch
php-symfony-serializer-2.8.32-1.el7.remi.noarch
php-soap-7.1.13-1.el7.remi.x86_64
php-symfony-http-foundation-2.8.32-1.el7.remi.noarch
php-symfony-asset-2.8.32-1.el7.remi.noarch
php-symfony-intl-2.8.32-1.el7.remi.noarch
php-symfony-locale-2.8.32-1.el7.remi.noarch
php-composer-spdx-licenses-1.3.0-1.el7.noarch
php-gd-7.1.13-1.el7.remi.x86_64
php-symfony-http-kernel-2.8.32-1.el7.remi.noarch
php-symfony-twig-bridge-2.8.32-1.el7.remi.noarch
php-symfony-property-info-2.8.32-1.el7.remi.noarch
php-symfony-debug-bundle-2.8.32-1.el7.remi.noarch
php-symfony-monolog-bridge-2.8.32-1.el7.remi.noarch
php-phpunit-PHP-CodeCoverage-4.0.8-3.el7.remi.noarch
php-symfony-2.8.32-1.el7.remi.noarch
php-mysqlnd-7.1.13-1.el7.remi.x86_64
php-seld-cli-prompt-1.0.3-1.el7.noarch
php-cli-7.1.13-1.el7.remi.x86_64
php-mbstring-7.1.13-1.el7.remi.x86_64
php-doctrine-cache-1.6.1-1.el7.remi.noarch
php-symfony-expression-language-2.8.32-1.el7.remi.noarch
php-doctrine-instantiator-1.0.5-1.el7.remi.noarch
php-doctrine-lexer-1.0.1-8.el7.remi.noarch
php-phpunit-Text-Template-1.2.1-1.el7.remi.noarch
php-phpunit-environment-2.0.0-1.el7.remi.noarch
php-phpdocumentor-reflection-common-1.0.1-1.el7.remi.noarch
php-ldap-7.1.13-1.el7.remi.x86_64
php-egulias-email-validator-1.2.13-3.el7.remi.noarch
php-myclabs-deep-copy-1.7.0-1.el7.remi.noarch
php-phpdocumentor-reflection-docblock2-2.0.5-1.el7.remi.noarch
php-symfony-dom-crawler-2.8.32-1.el7.remi.noarch
php-swiftmailer-5.4.8-3.el7.remi.noarch
php-symfony-polyfill-1.5.0-1.el7.remi.noarch
php-phpunit-PHPUnit-MockObject-3.4.4-1.el7.remi.noarch
php-symfony-routing-2.8.32-1.el7.remi.noarch
php-symfony-validator-2.8.32-1.el7.remi.noarch

PHP7.1のパッケージが確認できます。

次に、導入しているremiリポジトリに7.2があるか確認します。

# remiリポジトリを確認する
ll /etc/yum.repos.d/ | grep remi-

# 実行結果
[demo@localhost sources]# ll /etc/yum.repos.d/ | grep remi-
-rw-r--r--. 1 root root 456 Jan 16 07:06 remi-php54.repo
-rw-r--r--. 1 root root 1314 Jan 16 07:06 remi-php70.repo
-rw-r--r--. 1 root root 1314 Jan 16 07:06 remi-php71.repo
-rw-r--r--. 1 root root 1314 Jan 16 07:06 remi-php72.repo
// ← ココ
-rw-r--r--. 1 root root 750 Jan 16 07:06 remi-safe.repo

7.2のリポジトリが無い場合はremiリポジトリをアップデートしてください。

PHPの削除

それでは、現在インストールされているPHPを削除します。

# PHPと関連パッケージを削除
yum remove php-*

# 実行結果
[demo@localhost sources]# yum remove php-*
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---
> Package php.x86_64 0:7.1.13-1.el7.remi will be erased
.
.
.
省略
.
.
.

Dependency Removed:
composer.noarch 0:1.6.3-1.el7

Complete!

ここで改めてRPMパッケージの状態を確認すると、削除された事を確認できます。

[demo@localhost ~]# rpm -qa | grep php
// 何も表示されない
[demo@localhost ~]#

PHP7.2インストール

ここから、実際にPHP7.2をインストールしていきます。

まずは、導入出来るPHPの詳細を確認します。

# 導入出来るPHPの詳細を確認
yum info --enablerepo=remi,remi-php72 php

# 実行結果
[root@localhost ~]# yum info --enablerepo=remi,remi-php72 php
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: mirror.dmmlabs.jp
* extras: www.ftp.ne.jp
* remi: repo1.sea.innoscale.net
* remi-php72: repo1.sea.innoscale.net
* remi-safe: repo1.sea.innoscale.net
* updates: www.ftp.ne.jp
Available Packages
Name : php
Arch : x86_64
Version :
7.2.2
Release : 1.el7.remi
Size : 3.2 M
Repo : remi-php72
Summary : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
License : PHP and Zend and BSD and MIT and ASL 1.0
Description : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
: non-commercial database management systems, so writing a
: database-enabled webpage with PHP is fairly simple. The most common
: use of PHP coding is probably as a replacement for CGI scripts.
:
: The php package contains the module (often referred to as mod_php)
: which adds support for the PHP language to Apache HTTP Server.

本記事執筆時点では7.2.2のようです。これをインストールします。

# PHP 7.2 インストール
yum -y install --enablerepo=remi,remi-php72 php

終わったらバージョン確認のコマンドを叩いて導入を確認します。

# バージョンを確認
php -v

# 実行結果
[demo@localhost ~]# php -v
PHP
7.2.2 (cli) (built: Jan 30 2018 13:44:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

PHP 7.2がインストールされました。

ついでにエクステンション(拡張)もインストールしておきます。

# エクステンションのインストール
[demo@localhost ~]# yum -y install --enablerepo=remi --enablerepo=remi-php72 php php-opcache php-devel php-mbstring php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-gd php-intl php-symfony php php-pdo php-xml php-tokenizer php-pear php-zip

改めてRPMパッケージの状態を確認します。

# インストールされているRPMパッケージの状態を確認
rpm -qa | grep php

# 実行結果
[demo@localhost ~]# rpm -qa | grep php
php-common-7.2.2-1.el7.remi.x86_64
php-fedora-autoloader-1.0.0-1.el7.remi.noarch
php-symfony-common-2.8.34-1.el7.remi.noarch
php-symfony-expression-language-2.8.34-1.el7.remi.noarch
php-symfony-property-access-2.8.34-1.el7.remi.noarch
php-symfony-filesystem-2.8.34-1.el7.remi.noarch
php-symfony-templating-2.8.34-1.el7.remi.noarch
php-sebastian-recursion-context-2.0.0-1.el7.remi.noarch
php-symfony-debug-2.8.34-1.el7.remi.noarch
php-symfony-options-resolver-2.8.34-1.el7.remi.noarch
php-phpunit-Version-2.0.1-1.el7.remi.noarch
php-ldap-7.2.2-1.el7.remi.x86_64
php-egulias-email-validator-1.2.13-3.el7.remi.noarch
php-phpdocumentor-reflection-docblock-3.2.2-1.el7.remi.noarch
php-sebastian-code-unit-reverse-lookup-1.0.1-1.el7.remi.noarch
php-phpdocumentor-reflection1-1.0.7-5.el7.remi.noarch
php-paragonie-random-compat-2.0.11-1.el7.remi.noarch
php-symfony-asset-2.8.34-1.el7.remi.noarch
php-symfony-ldap-2.8.34-1.el7.remi.noarch
php-soap-7.2.2-1.el7.remi.x86_64
php-symfony-console-2.8.34-1.el7.remi.noarch
php-symfony-security-acl-2.8.0-4.el7.remi.noarch
php-doctrine-orm-2.5.12-1.el7.remi.noarch
php-symfony-framework-bundle-2.8.34-1.el7.remi.noarch
php-symfony-security-bundle-2.8.34-1.el7.remi.noarch
php-phpunit-PHPUnit-5.7.27-2.el7.remi.noarch
php-pecl-xdebug-2.6.0-1.el7.remi.7.2.x86_64
php-json-7.2.2-1.el7.remi.x86_64
php-7.2.2-1.el7.remi.x86_64
php-xml-7.2.2-1.el7.remi.x86_64
php-symfony-class-loader-2.8.34-1.el7.remi.noarch
php-symfony-yaml-2.8.34-1.el7.remi.noarch
php-process-7.2.2-1.el7.remi.x86_64
php-pdo-7.2.2-1.el7.remi.x86_64
php-doctrine-cache-1.6.1-1.el7.remi.noarch
php-symfony-process-2.8.34-1.el7.remi.noarch
php-doctrine-instantiator-1.0.5-1.el7.remi.noarch
php-symfony-config-2.8.34-1.el7.remi.noarch
php-symfony-translation-2.8.34-1.el7.remi.noarch
php-symfony-stopwatch-2.8.34-1.el7.remi.noarch
php-doctrine-annotations-1.2.7-4.el7.remi.noarch
php-phpunit-exporter-2.0.0-4.el7.remi.noarch
php-phpunit-environment-2.0.0-1.el7.remi.noarch
php-symfony-css-selector-2.8.34-1.el7.remi.noarch
php-symfony-browser-kit-2.8.34-1.el7.remi.noarch
php-phpunit-File-Iterator-1.4.5-1.el7.remi.noarch
php-doctrine-collections-1.4.0-1.el7.remi.noarch
php-phpdocumentor-reflection-common-1.0.1-1.el7.remi.noarch
php-phpunit-comparator-1.2.4-4.el7.remi.noarch
php-phpdocumentor-type-resolver-0.4.0-1.el7.remi.noarch
php-sebastian-object-enumerator-2.0.1-2.el7.remi.noarch
php-Monolog-1.23.0-1.el7.remi.noarch
php-webmozart-assert-1.2.0-1.el7.remi.noarch
php-phpspec-prophecy-1.7.5-1.el7.remi.noarch
php-myclabs-deep-copy-1.7.0-1.el7.remi.noarch
php-phpunit-PHP-TokenStream-1.4.12-1.el7.remi.noarch
php-phpdocumentor-reflection-docblock2-2.0.5-1.el7.remi.noarch
php-sebastian-resource-operations-1.0.0-2.el7.remi.noarch
php-doctrine-common-2.7.2-1.el7.remi.noarch
php-symfony-polyfill-1.5.0-1.el7.remi.noarch
php-symfony-routing-2.8.34-1.el7.remi.noarch
php-symfony-intl-2.8.34-1.el7.remi.noarch
php-symfony-serializer-2.8.34-1.el7.remi.noarch
php-symfony-locale-2.8.34-1.el7.remi.noarch
php-swiftmailer-5.4.9-1.el7.remi.noarch
php-phpunit-PHPUnit-MockObject-3.4.4-3.el7.remi.noarch
php-symfony-var-dumper-2.8.34-1.el7.remi.noarch
php-symfony-http-kernel-2.8.34-1.el7.remi.noarch
php-symfony-form-2.8.34-1.el7.remi.noarch
php-symfony-security-2.8.34-1.el7.remi.noarch
php-doctrine-dbal-2.5.12-3.el7.remi.noarch
php-doctrine-datafixtures-1.0.2-5.el7.remi.noarch
php-symfony-doctrine-bridge-2.8.34-1.el7.remi.noarch
php-symfony-web-profiler-bundle-2.8.34-1.el7.remi.noarch
php-symfony-twig-bundle-2.8.34-1.el7.remi.noarch
php-symfony-monolog-bridge-2.8.34-1.el7.remi.noarch
php-sebastian-global-state-1.1.1-1.el7.remi.noarch
php-symfony-2.8.34-1.el7.remi.noarch
php-pear-1.10.5-6.el7.remi.noarch
php-pecl-zip-1.15.2-1.el7.remi.7.2.x86_64
php-devel-7.2.2-1.el7.remi.x86_64
php-cli-7.2.2-1.el7.remi.x86_64
php-mbstring-7.2.2-1.el7.remi.x86_64
php-PsrLog-1.0.2-2.el7.remi.noarch
php-intl-7.2.2-1.el7.remi.x86_64
php-symfony-finder-2.8.34-1.el7.remi.noarch
php-symfony-dependency-injection-2.8.34-1.el7.remi.noarch
php-doctrine-lexer-1.0.1-8.el7.remi.noarch
php-phpunit-Text-Template-1.2.1-1.el7.remi.noarch
php-symfony-dom-crawler-2.8.34-1.el7.remi.noarch
php-phpunit-PHP-Timer-1.0.9-1.el7.remi.noarch
php-phpunit-diff-1.4.3-1.el7.remi.noarch
php-phpunit-PHP-Invoker-1.1.4-5.el7.remi.noarch
php-password-compat-1.0.4-1.el7.remi.noarch
php-twig-1.35.0-1.el7.remi.7.2.noarch
php-phpunit-PHP-CodeCoverage-4.0.8-4.el7.remi.noarch
php-doctrine-inflector-1.1.0-4.el7.remi.noarch
php-symfony-http-foundation-2.8.34-1.el7.remi.noarch
php-symfony-validator-2.8.34-1.el7.remi.noarch
php-bcmath-7.2.2-1.el7.remi.x86_64
php-gd-7.2.2-1.el7.remi.x86_64
php-symfony-event-dispatcher-2.8.34-1.el7.remi.noarch
php-symfony-twig-bridge-2.8.34-1.el7.remi.noarch
php-symfony-property-info-2.8.34-1.el7.remi.noarch
php-symfony-debug-bundle-2.8.34-1.el7.remi.noarch
php-symfony-swiftmailer-bridge-2.8.34-1.el7.remi.noarch
php-mysqlnd-7.2.2-1.el7.remi.x86_64
php-opcache-7.2.2-1.el7.remi.x86_64

7.2のパッケージがインストールされている事が確認できます。

最後に、再起動をしてPHP7.2を適用させます。

# Apache再起動
service httpd restart

# 実行結果
[root@localhost ~]# service httpd restart
Redirecting to /bin/systemctl restart httpd.service

これでPHP7.2のインストールは完了です。

まとめ

以上で作業は完了です。バージョンアップを細かく行っていく事でシステム全体を健全に保ちつつ、搭載しているアプリケーションの変更作業を最小限に抑える事ができます。

特に7.2ではMcrypt拡張の削除など、WEBアプリケーション、特にPHPフレームワークのコア部分にも影響のある変更点もあるので、古いまま使っていると、あるタイミングでバージョンを上げようとしても色々と大変になってしまいます。なるべくPHPコアソースやフレームワークのバージョンは最新に保っていく事が運用の面でも良いと思います。