【AWS】Amazon Linux 2でApacheがPHP7.4を実行出来ない

Amazon Linux 2でApacheがPHP7.4を実行出来ない

AWSで「Amazon Linux 2」を選択して作成したEC2インスタンスにインストールしたPHP7.4が
Apacheで実行出来ない事象が起きたので解決策をPHP7.4のインストールからメモ。

事象: ページにPHPのソースコードが画面に表示されてしまう or 何も表示されない。

環境: AWS EC2 Amazon Linux 2 AMI (HVM), SSD Volume Type、 Apache/2.4.41、PHP 7.4.3

【原因】: Apacheが利用するPHPモジュールが存在しない。


EC2インスタンスへPHP7.4をインストールした際に本来同時にインストールされるはずの
Apacheが利用するPHP7.4用モジュール「libphp74.so」がインストールされていなかった事が原因でした。

【解決】: PHP7.4インストール時のパッケージ名指定方法に注意

PHP7.4インストールの際のパッケージ名の指定の仕方によって
Apacheに必要なPHPモジュールファイルが同時に入手出来ないケースがありましたので
モジュールを正しく追加させるためのインストール手順をまとめていきます。

PHP7.4インストール(Amazon Linux 2)手順まとめ

(本記事時点)PHPをそのままyumインストールした場合、
旧バージョンのPHP5系がインストールされます。

epelリポジトリを有効にする

Amazon Linux 2でepelリポジトリを有効にするために下記のコマンドを順番に実行する。
(後述するremiリポジトリに必要です)

$ sudo amazon-linux-extras enable epel
$ sudo yum clean metadata
$ sudo yum install epel-release
PHPインストールパッケージの追加

インストールパッケージに必要な「remiリポジトリ」を追加するために以下のコマンドを実行。

$ sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

※remiリポジトリ公式ドキュメントより、
「Maintained Enterprise Linux (RHEL / CentOS / Other clones)」を参照

/etc/yum.repos.d/配下にPHP7系のインストールに必要なパッケージが入手出来ている事を確認する

$ ls /etc/yum.repos.d/
amzn2-core.repo    epel-testing.repo  remi-glpi91.repo  remi-glpi93.repo  remi-modular.repo  remi-php70.repo  remi-php72.repo  remi-php74.repo  remi.repo
amzn2-extras.repo  epel.repo          remi-glpi92.repo  remi-glpi94.repo  remi-php54.repo    remi-php71.repo  remi-php73.repo  remi-safe.repo
バージョン7.4を指定してインストール

目的のバージョンに該当するパッケージ名を指定します。
(7.n系 → php7nとする)

OK(モジュール同時入手可)

1. バージョンを表す数字の後に-phpを付けて実行する

$ sudo yum -y install php74-php

2. 他のPHPライブラリも追加でインストールする
(日本語、画像、MySQL連携を有効にするライブラリ)

$ sudo yum -y install php74-php-mbstring php74-php-gd php74-php-mysqlnd php74-php-pdo php74-php-pdo-dblib php74-php-pdo-firebird
NG

以下の場合だとPHP本体はインストールされますが、モジュールファイルがインストールされません。

(NG) $ sudo yum -y install php74 (-phpなし)
モジュールのインストール確認

上記、OKの方のコマンドでPHPのインストールが完了したら
Apache用のモジュールもインストールされているかを確認する。

$ ls /etc/httpd/modules/

モジュールファイル/etc/httpd/modules/libphp74.soが存在していればOK!

phpコマンドのエイリアスを作成

「php74」から「php」でコマンドを実行出来る様になります。

$ sudo ln /usr/bin/php74 /usr/bin/php

バージョン確認

$ php -v
PHP 7.4.3 (cli) (built: Feb 18 2020 11:53:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
PHPを一度アンインストールしたい場合

(以下のコマンドで、PHPと関連パッケージをアンインストール出来ます)

$ sudo yum remove php* -y

Apacheの再起動と設定確認

1. Apacheをあらかじめインストールしていた場合は、PHPを連携させるために再起動を行います。

$ sudo systemctl restart httpd

2. PHPモジュールの組込を確認する方法

Apacheの設定ファイル /etc/httpd/conf/httpd.conf が読み込んでいる、
/etc/httpd/conf.modules.d/配下PHP用のモジュール設定ファイルを確認する。

$ vi /etc/httpd/conf.modules.d/15-php74-php.conf

libphp74.soがモジュールとして組み込まれている事が確認出来る

<IfModule !mod_php5.c>
  <IfModule prefork.c>
    LoadModule php7_module modules/libphp74.so
  </IfModule>
</IfModule>

ページへアクセスしてPHPが実行されていればOKです!

Follow me!