AmazonLinux上でPHP7.1を利用していたのですが、今年の12月でセキュリティアップデートの提供が終了するため、サポート期間が2021年12月までのPHP7.3へアップグレードしました。
PHP7.1のサポート期間が今年12月1日までなので、週末は7.3にアップデート作業かな。こういう時は可能な範囲で最大まで上げないと毎年作業することになるwhttps://t.co/HxfmR9O7SX pic.twitter.com/EueYheJgkK
— 勝部麻季人 🍲 (@katsube) 2019年3月29日
パフォーマンスも20%程度アップするみたいですね。こちらも目的だったりもしますw
目次
PHP 7.1から7.3へ移行
現在の環境確認
AmazonLinuxの1系を使ってます。
$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
v7.1.27が入っていますね。
$ php -v
PHP 7.1.27 (cli) (built: Mar 8 2019 18:22:16) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
現在インストールされているパッケージは以下の通り。利用してない物があればこの機会に棚卸しするのが良いでしょう。
$ yum list installed | grep php
php71.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-bcmath.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-cli.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-common.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-devel.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-gd.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-json.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-mbstring.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-mysqlnd.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-pdo.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-pecl-igbinary.x86_64 1.2.2-0.1.20151217git2b7c703.6.amzn1
php71-pecl-memcache.x86_64 3.0.9-0.4.20160311git4991c2f.9.amzn1
php71-pecl-memcached.x86_64 3.0.0-0.1.20160217git6ace07d.3.amzn1
php71-process.x86_64 7.1.27-1.37.amzn1 @amzn-updates
php71-xml.x86_64 7.1.27-1.37.amzn1 @amzn-updates
事前準備
AWS EC2やLightsailであればインスタンスのスナップショットを取っておきます。
その後、PHPをWebサーバ上で動かしている場合はこのタイミングで停止します。バッチサーバなどコマンドラインだけで使っている場合は次の工程へ。
$ sudo service httpd stop
[sudo] password for katsube:
Stopping httpd: [ OK ]
cronで何かPHPのスクリプトを動かしている場合はそちらも停止しておきます。
移行作業
流れとしては消して、再度入れるだけです。今回はyumで管理していたのでコマンド一発です。
まずはyum erase
で関連するパッケージをすべて削除
$ sudo yum erase php71*
その後、必要なパッケージをインストールします。
$ sudo yum install php73 php73-bcmath php73-cli php73-common php73-devel php73-gd php73-json php73-mbstring php73-mysqlnd php73-pdo php73-xml php73-process php73-opcache
今回はv7.3.2が入りました。
$ php -v
PHP 7.3.2 (cli) (built: Feb 15 2019 18:36:52) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.2, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.2, Copyright (c) 1999-2018, by Zend Technologies
php.iniの編集
/etc/php.ini
が最終的に/etc/php-7.3.ini
を向くようになるので、この中身を必要に応じて編集します。
$ sudo cp /etc/php-7.3.ini /etc/php-7.3.ini.org
$ sudo vi /etc/php-7.3.ini
date.timezone = Asia/Tokyo
mbstring.language = Japanese
mbstring.internal_encoding = UTF8
memory_limit = 16M
expose_php = Off
そういえば最近はdate.timezone
の指定は必須ではなくなった(警告が出なくなった)んですよね。
また同時に/etc/php-7.3.d/
配下のファイルも必要があれば編集します。
$ ls /etc/php-7.3.d/
10-opcache.ini 20-exif.ini 20-mbstring.ini 20-sockets.ini 20-xmlwriter.ini 30-xmlreader.ini
20-bcmath.ini 20-fileinfo.ini 20-mysqlnd.ini 20-sqlite3.ini 20-xsl.ini opcache-default.blacklist
20-bz2.ini 20-ftp.ini 20-pdo.ini 20-sysvmsg.ini 20-zip.ini php.ini
20-calendar.ini 20-gd.ini 20-phar.ini 20-sysvsem.ini 30-mysqli.ini
20-ctype.ini 20-gettext.ini 20-posix.ini 20-sysvshm.ini 30-pdo_mysql.ini
20-curl.ini 20-iconv.ini 20-shmop.ini 20-tokenizer.ini 30-pdo_sqlite.ini
20-dom.ini 20-json.ini 20-simplexml.ini 20-xml.ini 30-wddx.ini
再開と確認作業
では再開していきます。止めていたApacheを起動するだけ。
$ sudo service httpd start
Starting httpd: [ OK ]
念の為、以下のようなPHPのファイルをドキュメントルート下などに配置しブラウザからのぞいてみます。
<?php
phpinfo();
Apacheのモジュールも切り替わっていることが確認できました。このファイルはシステム内部の情報が見放題になってしまうので、確認したらすぐに消すかドキュメントルート外に移動しておきます。
その他
言語仕様の変更点
ひとまず下位互換性が切られたところを中心に見ておくのが良いかと思います。
7.1 ⇛ 7.2
7.2 ⇛ 7.3
※こちらは日本語訳がまだみたいですね。
PECLがいない
執筆時点で、AmazonLinuxのyumリポジトリにはPHP7.3用のPECL関連のパッケージが一切いません。もし利用したい場合はPHP7.2をインストールするか、REMIなどのyumリポジトリを追加する必要があります。
$ yum search php73
php73.x86_64 : PHP scripting language for creating dynamic web sites
php73-bcmath.x86_64 : A module for PHP applications for using the bcmath library
php73-cli.x86_64 : Command-line interface for PHP
php73-common.x86_64 : Common files for PHP
php73-dba.x86_64 : A database abstraction layer module for PHP applications
php73-dbg.x86_64 : The interactive PHP debugger
php73-devel.x86_64 : Files needed for building PHP extensions
php73-embedded.x86_64 : PHP library for embedding in applications
php73-enchant.x86_64 : Enchant spelling extension for PHP applications
php73-fpm.x86_64 : PHP FastCGI Process Manager
php73-gd.x86_64 : A module for PHP applications for using the gd graphics library
php73-gmp.x86_64 : A module for PHP applications for using the GNU MP library
php73-imap.x86_64 : A module for PHP applications that use IMAP
php73-intl.x86_64 : Internationalization extension for PHP applications
php73-json.x86_64 : JavaScript Object Notation extension for PHP
php73-ldap.x86_64 : A module for PHP applications that use LDAP
php73-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php73-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
php73-odbc.x86_64 : A module for PHP applications that use ODBC databases
php73-opcache.x86_64 : The Zend OPcache
php73-pdo.x86_64 : A database access abstraction module for PHP applications
php73-pdo-dblib.x86_64 : PDO driver Microsoft SQL Server and Sybase databases
php73-pgsql.x86_64 : A PostgreSQL database module for PHP
php73-process.x86_64 : Modules for PHP script using system process interfaces
php73-pspell.x86_64 : A module for PHP applications for using pspell interfaces
php73-recode.x86_64 : A module for PHP applications for using the recode library
php73-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices
php73-soap.x86_64 : A module for PHP applications that use the SOAP protocol
php73-tidy.x86_64 : Standard PHP module provides tidy library support
php73-xml.x86_64 : A module for PHP applications which use XML
php73-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol
7.2にはいるんですよね。
$ yum search php72 | grep pecl
php72-pecl-apcu.x86_64 : APC User Cache
php72-pecl-apcu-devel.x86_64 : APCu developer files (header)
php72-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer
php72-pecl-igbinary-devel.x86_64 : Igbinary developer files (header)
php72-pecl-imagick.x86_64 : Extension to create and modify images using
php72-pecl-imagick-devel.x86_64 : imagick extension developer files (header)
php72-pecl-mcrypt.x86_64 : Bindings for the libmcrypt library
php72-pecl-memcache.x86_64 : Extension to work with the Memcached caching daemon
php72-pecl-memcached.x86_64 : Extension to work with the Memcached caching
php72-pecl-oauth.x86_64 : PHP OAuth consumer extension
php72-pecl-redis.x86_64 : Extension for communicating with the Redis key-value
php72-pecl-ssh2.x86_64 : Bindings for the libssh2 library
php72-pecl-uuid.x86_64 : Universally Unique Identifier extension for PHP
php72-pecl-xdebug.x86_64 : Provides functions for function traces and profiling
売り上げランキング: 60,134
このブログを応援する
お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。