Raspberry Pi 3+の設定（忘備録）その6 PHPとphpMyAdminのアップデート

自分がやった作業のメモです。形にしておかないと忘れてしまうので書いたついでに記事にしました。
なんとなくの試行錯誤でやってるのでお手柔らかにお願いします。間違い等ありましたらご指摘ください。

# 前提と目標
Raspberry Pi OSにはPHP 7.3.29、phpMyAdmin 4.9.7がインストール済み。目指すはPHP 8.2のインストールとpmaのバージョンアップです。

# 事前準備
インストール済みのphpMyAdminのパスワードを思い出してください。mysqlのユーザーphpmyadminのパスワードです。（もしかしたらいらないのかもしれませんが。。。）

# OSまわりのアップデート
参考url 

https://knt60345blog.com/update/

パッケージを更新、インストール済パッケージを更新、ディストリビュージョンを更新、カーネルをバージョンアップ、不要なファイルとアーカイブの削除、最後に再起動。
個人的にはふたつめのインストール済パッケージの更新が一番時間がかかりました。
```console
$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt dist-upgrade -y
$ sudo rpi-update
$ sudo apt autoremove -y
$ sudo apt autoclean
#再起動
$ sudo reboot
```

# 既存のPHP7.3の削除とPHP8.2のインストール
ラズパイのパッケージに含まれているPHPのバージョンが7.3なので、8.2にバージョンを上げたいと思います。この作業をするには、一度PHP7.3を削除して、8.2を入れなおす必要があります。当然のことながら編集済みのphp.iniは無くなります。編集した場所を忘れないようにしてください。
参考url 

https://www.hiramine.com/programming/php/install_php8_on_raspi.html

PHPのバージョン確認。この時点ではPHP 7.3.31でした
```console
$ php -v
PHP 7.3.31-1~deb10u3 (cli) (built: Feb 26 2023 13:00:55) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.31-1~deb10u3, Copyright (c) 1999-2018, by Zend Technologies
```

PHP7.3を削除します。
```console
$ sudo apt purge php7.*
$ sudo apt autoclean
$ sudo apt autoremove
```
途中で「phpmyadmin 用のデータベースの設定除去を dbconfig-common で行いますか？」と聞かれますが「いいえ」にします。
![スクリーンショット (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/75a2865a-bee0-0a29-4087-1658ddcad5bc.png)



この時点でインストールされるPHPのバージョンをチェックします。apt updateしましたが、先ほど更新したので最新です。
```console
$ sudo apt update
$ sudo apt depends php
php
  依存: php7.3
```
この時点では7.3がインストールされます。

PHP8.2がインストールされるようにします。
```console
$ sudo wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
$ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
```
もう一度パッケージを更新してから、インストールするPHPのバージョンをチェックします。
```console
$ sudo apt update
$ sudo apt depends php
php
  依存: php8.2
```
これで8.2を入れることができます。PHPと関連モジュールを入れます。
```console
$ sudo apt install php -y
$ sudo apt install php-bcmath php-mbstring php-xml php-mysql php-curl php-zip -y
```
インストール後のバージョン確認
```console
$ php -v
PHP 8.2.4 (cli) (built: Mar 16 2023 14:35:29) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.4, Copyright (c), by Zend Technologies
```

phpを修正します。修正前ファイルをコピーして残しておきます。
```console
$ cd /etc/php/8.2/apache2
$ sudo cp php.ini php.ini.old
```
php.ini内のDynamic Extensionsの下にある「extension=mbstring」のコメントを外して上書き保存します。
```diff_ini
- ;extension=mbstring
+ extension=mbstring
```

# phpinfoがソースコードで見えてしまう
phpinfo()をブラウザで見るとソースコードで見えてしまいました。
![スクリーンショット (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/7149c30b-953d-bdff-47cb-8856c3c9afe5.png)
apache2の入れ直しなどで解消します。
参考url 

https://teratail.com/questions/202181

https://qiita.com/berukokoko/items/21a76b1e6e76eda9f5ee

apacheを入れなおしてみます。
```console
$ sudo apt purge apache2
$ sudo apt install apache2
```
モジュールを有効化しようとすると怒られました。
```console
$ sudo a2enmod php8.2
Considering dependency mpm_prefork for php8.2:
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.2, aborting
```
mpm_eventを無効化→有効化してからphp8.2を有効化してサービスの再起動をします。
```console
$ sudo a2dismod mpm_event
$ sudo a2enmod mpm_prefork
$ sudo apt install libapache2-mod-php8.2
$ sudo a2enmod php8.2
$ sudo a2enmod headers
#サービス再起動
$sudo systemctl restart apache2
```
phpinfoが表示されました。
![スクリーンショット (36).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/b3beb855-9eaa-9bbb-5224-a5a3b3ad8aaa.png)


その他、セキュリティ対策は以前の記事「Raspberry Pi 3+の設定（忘備録）その3  新規ユーザー作成・PHPのインストール」を参考に行って下さい。

https://qiita.com/cafe-capitola/items/d167b4e96fa78dc8878c/

# phpMyAdmin入れ直し
現在の安定版である5.2.0を入れてみようかと思います。
これは以前の記事「Raspberry Pi 3+の設定（忘備録）その5 phpMyAdminインストール」を参考に入れます。

https://qiita.com/cafe-capitola/items/02827f534ca78a08e82e

```console
#サービスを止める
$ sudo /etc/init.d/apache2 stop
$ sudo systemctl stop mariadb.service

#旧環境のバックアップ
$ cd /usr/share
$ sudo rm -r phpmyadmin.old/
$ sudo mv phpmyadmin phpmyadmin.old

#パッケージダウンロード
$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
$ sudo unzip phpMyAdmin-5.2.0-all-languages.zip
$ sudo mv phpMyAdmin-5.2.0-all-languages phpmyadmin
$ sudo rm phpMyAdmin-5.2.0-all-languages.zip

#インストール（インストール中、mysqlが起動していないと途中でエラーになります）
$ sudo /etc/init.d/apache2 restart
$ sudo systemctl start mariadb.service
$ sudo apt install phpmyadmin
```

インストール中、使用するwebサーバを聞かれるので「apache2」を選択。
![スクリーンショット (37).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/4bce0559-c224-f789-99f2-ffb2ac7b7e1e.png)

phpmyadmin 用のデータベースを dbconfig-common で設定しますか？と聞かれるので「はい」を選択。
![スクリーンショット (38).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/d5ec817d-6093-d615-c4fb-366f58718294.png)

phpmyadminのパスワードを聞かれるので、事前準備で思い出したphpmyadminのパスワードを入力してください。（もしかしたら前回と違ってもいいのかもしれないんですが未検証です。同じなら無難かな、と。すいません。）
![スクリーンショット (39).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/3c57f991-621c-0d5e-ed67-036a6fb067c6.png)


インストール終了後、/etc/apache2/apache2.confに１行追記します。

```/etc/apache2/apache2.conf
#ファイル末尾に追記
Include /etc/phpmyadmin/apache.conf
```

```console
#サービス再起動
$ sudo /etc/init.d/apache2 restart
$ sudo systemctl start mariadb.service
```
これでpmaの画面が出るはず！！！！！が、出ない。エラーです。

# phpMyAdminがエラーを吐く
apacheのログファイルには何も出ていないのですが、php.iniのdisplay_errorをonにしてみたところ、ブラウザ上でエラーメッセージが表示されました。

> Fatal error: Array and string offset access syntax with curly braces is no longer supported in /usr/share/phpmyadmin/libraries/url_generating.lib.php on line 231

ええええぇぇぇぇぇ・・・。

# ダメもとでphpMyAdminのほかのバージョンを使ってみる
とりあえず5.2.1のバージョンを落として入れてみます。手順は先述の「phpMyAdmin入れ直し」のとおり。バージョン番号だけ5.2.1に読み替えて実行してください。
sudo apt install phpmyadminを実行すると、前回のようなwebサーバの確認やdbconfig-commonの確認画面は出てきませんでした。
![スクリーンショット (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/ef05eca2-1d7f-2490-d94d-1626e838e9c2.png)
・・・入りました。ログインして一通り触ってみた感じなんとなく大丈夫そうです。
というわけで、作業が終わりました。今回この作業をするにあたり、へっぽこなので何回もsdカードにイメージファイルを書き戻ししてます。皆さんはすんなりうまくいきますように。では。

# 関連ページ

https://qiita.com/cafe-capitola/items/b5e3e5dfdc8ca9f9a744

https://qiita.com/cafe-capitola/items/283f41793cde409a36a6

https://qiita.com/cafe-capitola/items/d167b4e96fa78dc8878c

https://qiita.com/cafe-capitola/items/97dd713185049d4a8274

https://qiita.com/cafe-capitola/items/02827f534ca78a08e82e

https://qiita.com/cafe-capitola/items/9f97c791a598420a7e57