Home > ブログ > EC2におけるPHP8系への切り替え

ブログ

EC2におけるPHP8系への切り替え

PHP7.4のサポート終了も近いので(2022.11)、お客様のサーバーを順番にPHP8系に切り替えています。

AWSのEC2の環境だと、PHPはAmazon ExtrasのPHP7.4を使っているケースが多いのですが、Amazon Extrasの場合、現時点ではPHP8.1は提供されていないので、バージョンアップ先としてはPHP8.0を選択することになります。

システム(PHPスクリプト)側の対応は別として、PHPのバージョン切り替え自体はそれほど難しくはありません。

Amazon ExtrasのPHP7.4からPHP8.0への切り替えの例

$ sudo amazon-linux-extras disable php7.4
$ sudo amazon-linux-extras enable php8.0
$ sudo yum clean metadata
$ sudo yum install php-cli php-pdo php-mbstring php-mysqlnd php-fpm php-json php-gd php-xml
(PHP8系でモジュールを再インストール。何をインストールするかは環境により異なる。)
この時点でphp-fpmは8.0のものに切り替わっている。

こんな感じで切り替えることができます。

注意が必要なのは、Amazon ExtrasのPHP8.0ではPECLのいくつかのモジュールが提供されていない点です。

Amazon ExtrasのPHP7.4で提供されているpeclモジュール

$ sudo yum search php-pecl
読み込んだプラグイン:langpacks, priorities, update-motd
============================ N/S matched: php-pecl =============================
php-pecl-apcu-devel.noarch : Development files for php-pecl-apcu
php-pecl-igbinary-devel.noarch : Development files for php-pecl-igbinary
php-pecl-imagick-devel.noarch : Development files for php-pecl-imagick
php-pecl-msgpack-devel.noarch : Development files for php-pecl-msgpack
php-pecl-apcu.x86_64 : APCu - APC User Cache
php-pecl-igbinary.x86_64 : igbinary extension
php-pecl-imagick.x86_64 : Provides a wrapper to the ImageMagick library.
php-pecl-mailparse.x86_64 : Email message manipulation
php-pecl-memcache.x86_64 : memcached extension
php-pecl-memcached.x86_64 : PHP extension for interfacing with memcached via
                          : libmemcached library
php-pecl-msgpack.x86_64 : PHP extension for interfacing with MessagePack
php-pecl-oauth.x86_64 : oauth consumer extension
php-pecl-redis.x86_64 : PHP extension for interfacing with Redis
php-pecl-ssh2.x86_64 : Bindings for the libssh2 library
php-pecl-uuid.x86_64 : UUID extension

Amazon ExtrasのPHP8.0で提供されているpeclモジュール

$ sudo yum search php-pecl
読み込んだプラグイン:langpacks, priorities, update-motd
============================ N/S matched: php-pecl =============================
php-pecl-imagick-devel.noarch : Development files for php-pecl-imagick
php-pecl-imagick.x86_64 : Provides a wrapper to the ImageMagick library.
php-pecl-memcache.x86_64 : Extension to work with the Memcached caching daemon

提供モジュールの数がだいぶ減っています。 php-pecl-memcachedなどはPHP8に対応する時期も遅かったようので、そのあたりが影響しているのかもしれません。個人的には、お客様環境でphp-pecl-memcachedを使っているケースがよくあるので、php-pecl-memcachedがないのは痛いところです。

peclモジュールなので必要なものは別途Buildする手もありますが、特にAmazon Extrasにこだわる必要がないなら、remiからのインストールに切り替えた方がいいかもしれません。

remiからPHPをインストールして切り替える手順の例

remiのインストール
$ sudo amazon-linux-extras install epel
$ sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm

PHPモジュールのインストール。何をインストールするかは環境により異なる。
$ sudo yum install php80-php-pecl-msgpack php80-php-mysqlnd php80-php-gd php80-php-pecl-memcached php80-php-pdo php80-php-mbstring php80-php-cli php80-php-opcache php80-php-pecl-igbinary php80-php-common php80-php-xml php80-php-fpm

phpのconfigファイルはAmazon Extrasのものと異なるので必要に応じて設定ファイルを修正する。
設定ファイルのパスは/etc/opt/remi/php80/。

インストールしたphpのfpmを起動
$ sudo systemctl enable php80-php-fpm
$ sudo systemctl start php80-php-fpm

Nginx,Apache等がremiで入れたphp-fpmをアクセスするように設定ファイルを変更する。
Nginxならfastcgi_passを
fastcgi_pass unix:/var/opt/remi/php80/run/php-fpm/www.sock;
に変更したりとか。

configの反映(Nginxの場合)
$ sudo systemctl reload nginx.service

デフォルト(Amazon Extras)のfpmは不要なら停止
$ sudo systemctl stop php-fpm
$ sudo systemctl disable php-fpm

新規のお問い合わせで、PHP5.1/5.3とかで動作していたスクリプトが、レンタルサーバー会社の対応終了に伴い新しいPHPに切り替えざるを得なくなったが、PHP7/8系では動作しなくなったのでなんとかして欲しいというご依頼をちょこちょこといただきますが、PHP5.1/5.3の時代に作られたPHPスクリプトは、PHP8系への対応に修正箇所も多くなる傾向があり、すぐには対応できないことも多くあります。

取り急ぎ動作する状態にするため、(そのサーバーぎりぎり残されている)PHP5.4/5.6へ対応することもありますが、これらの5系もいずれ削除される時がくるでしょう。 その時になって手詰まりにならないように、PHP8系への移行を計画的に進めておきましょう。

投稿日:2022/09/26 13:48

タグ: Server PHP

Top

アーカイブ

タグ

Server (18) プログラミング (15) 作業実績 (15) PHP (11) ネットワーク (9) C (7) C++ (7) Webアプリ (6) EC-CUBE (6) Nginx (5) OpenSSL (5) laravel (4) Linux (4) 書籍 (4) JavaScript (3) AWS (3) Rust (3) Vue.js (3) Golang (2) Symfony (2) Apache (1) デモ (1) お知らせ (1) MySQL (1) CreateJS (1) OSS (1)