phpinfo、ソースがそのまま表示されるときの解決備忘録

## 経緯
PHPでファイルアップローダーを実装したい
↓
PHPをインストール、ドキュメントルート下で.htmlにPHPコードを書き込む
↓
日本語の文字化け
↓
解消の手がかりとしてphpinfoを参照すると良いことを知る
↓
\<?php phpinfo(); ?>を書き込んだファイルにブラウザでアクセス
↓
\<?php phpinfo(); ?>のコードだけが表示される

## 解決方法
- libapache2-mod-phpのインストール
- php8.1を有効化
## 環境
Ubuntu Server22.04 TLS
Apache/2.4.52
PHP8.1

## 実践
### ①libapache2-mod-phpのインストール
PHPだけをインストールするだけでは不十分らしく、モジュールをインストールする

`$sudo install php libapache2-mod-php`

これで「php.ini」を参照できるようになる（今回は編集しない）

### ②php8.1を有効化
`$sudo a2enmod php8.1`

筆者の場合、ここで
> Considering dependency mpm_prefork for php8.1:
Considering conflict mpm_event for mpm_prefork:
ERROR: Module mpm_event is enabled - cannot proceed due to conflicts. It needs to be disabled first!
Considering conflict mpm_worker for mpm_prefork:
ERROR: Could not enable dependency mpm_prefork for php8.1, aborting

とエラーが出た

mpm_eventを無効にする必要があるらしいので

`sudo a2dismod mpm-event`

すると

> Module mpm_event disabled.
To activate the new configuration, you need to run:
  systemctl restart apache2

とのことなので

`$sudo systemctl restart apache2`

> × apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Wed 2023-05-31 13:16:25 UTC; 19s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 2242 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)
        CPU: 9ms
 May 31 13:16:25 guchibu systemd[1]: Starting The Apache HTTP Server...
May 31 13:16:25 guchibu apachectl[2245]: AH00534: apache2: Configuration error: No MPM loaded.
May 31 13:16:25 guchibu apachectl[2242]: Action 'start' failed.
May 31 13:16:25 guchibu apachectl[2242]: The Apache error log may have more information.
May 31 13:16:25 guchibu systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE
May 31 13:16:25 guchibu systemd[1]: apache2.service: Failed with result 'exit-code'.
May 31 13:16:25 guchibu systemd[1]: Failed to start The Apache HTTP Server.

MPMを有効にしないとダメなのか...
ここで少しハマりました

`$sudo a2enmod mpm_event`
 > Considering conflict mpm_worker for mpm_event:
Considering conflict mpm_prefork for mpm_event:
ERROR: Module mpm_prefork is enabled - cannot proceed due to conflicts. It needs to be disabled first!

今度はmpm_preforkを無効にする必要があるとのこと

`$sudo a2dismod mpm_prefork`
>ERROR: The following modules depend on mpm_prefork and need to be disabled first: php8.1

php8.1を無効化する必要があるとのこと...
三角関係のように関連しているのか...

`$sudo a2dismod php8.1`
> Module php8.1 disabled.
To activate the new configuration, you need to run:
  systemctl restart apache2

エラーは消えた

`$sudo systemctl restart apache2`

正常に再起動したようだ
しかし、Php8.1は有効にする必要があるのは確定なので

`$sudo a2enmod php8.1`
> Considering dependency mpm_prefork for php8.1:
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Module mpm_prefork already enabled
Considering conflict php5 for php8.1:
Enabling module php8.1.
To activate the new configuration, you need to run:
  systemctl restart apache2

いろいろ出力されたが、エラーはないようだ

`$sudo systemctl restart apache2`

正常に再起動できたので、ブラウザでアクセスしてみると...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/5d5c76a3-68c8-f26f-4029-f705d063d427.png)

表示された
成功である