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 qiita.com
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 www.php.net
7.2 ⇛ 7.3 www.php.net ※こちらは日本語訳がまだみたいですね。
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