経緯
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
正常に再起動できたので、ブラウザでアクセスしてみると...
表示された
成功である