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