やりたくない作業なのですが、FreeBSD12のパッケージを更新したら、PHP8.0系がインストールされてしまう状況になりました。
直接PHPを使用しているのではなく、WordPressの動作に必要だから使っているだけ。直接PHPプログラミングを行うわけじゃないのでPHPのバージョンなんて何でもいいのですが、過去に何度もPHPを更新して、直後、WordPressがしばらく使えなくなるという現象が発生しているので、できることならPHPのメジャーバージョンは行いたくない。というのが私の本音。
今回表示されたメッセージは、以下の通り、7.4系から8.0系に置き換わるのではなく、両バージョンを並行利用できるようなので、それならば、上げてみようかという気になりましたが、、、、またまた泥沼に。
更新を試すのは、まずテストサイトから。
New packages to be INSTALLED: php80: 8.0.17_2 php80-curl: 8.0.17_2 php80-exif: 8.0.17_2 php80-fileinfo: 8.0.17_2 php80-ftp: 8.0.17_2 php80-gd: 8.0.17_2 php80-mysqli: 8.0.17_2 php80-pecl-imagick: 3.5.1 php80-tokenizer: 8.0.17_2 php80-xml: 8.0.17_1 php80-zip: 8.0.17_2 php80-zlib: 8.0.17_2 shared-mime-info: 2.2 Installed packages to be UPGRADED: php74: 7.4.27 -> 7.4.28_2 php74-bz2: 7.4.27 -> 7.4.28_2 php74-ctype: 7.4.27 -> 7.4.28_2 php74-curl: 7.4.27 -> 7.4.28_2 php74-exif: 7.4.27 -> 7.4.28_2 php74-fileinfo: 7.4.27 -> 7.4.28_2 php74-filter: 7.4.27 -> 7.4.28_2 php74-ftp: 7.4.27 -> 7.4.28_2 php74-gd: 7.4.27 -> 7.4.28_2 php74-iconv: 7.4.27 -> 7.4.28_2 php74-json: 7.4.27 -> 7.4.28_2 php74-mbstring: 7.4.27 -> 7.4.28_2 php74-mysqli: 7.4.27 -> 7.4.28_2 php74-openssl: 7.4.27 -> 7.4.28_2 php74-session: 7.4.27 -> 7.4.28_2 php74-tokenizer: 7.4.27 -> 7.4.28_2 php74-xml: 7.4.27 -> 7.4.28_1 php74-zip: 7.4.27 -> 7.4.28_2 php74-zlib: 7.4.27 -> 7.4.28_2 phpMyAdmin-php74: 4.9.7 -> 4.9.10
実際に実行してみると、途中でphp7.4系と8.0系の衝突が発生!結局、7.4系で据え置くか、8.0系に切り替えるか決断せざるを得ない状況になりました。
- php80-xml-8.0.17_1 conflicts with php74-xml-7.4.28_1 on /usr/local/include/php/ext/xml/php_xml.h - php80-xml-8.0.17_1 conflicts with php74-xml-7.4.27 on /usr/local/include/php/ext/xml/php_xml.h - php80-8.0.17_2 conflicts with php74-7.4.28_2 on /usr/local/bin/php - php80-8.0.17_2 conflicts with php74-7.4.27 on /usr/local/bin/php - php80-8.0.17_2 conflicts with php74-json-7.4.28_2 on /usr/local/include/php/ext/json/php_json.h - php80-8.0.17_2 conflicts with php74-json-7.4.27 on /usr/local/include/php/ext/json/php_json.h - php80-fileinfo-8.0.17_2 conflicts with php74-fileinfo-7.4.28_2 on /usr/local/include/php/ext/fileinfo/config.h - php80-fileinfo-8.0.17_2 conflicts with php74-fileinfo-7.4.27 on /usr/local/include/php/ext/fileinfo/config.h - php80-gd-8.0.17_2 conflicts with php74-gd-7.4.28_2 on /usr/local/include/php/ext/gd/gd_compat.h - php80-gd-8.0.17_2 conflicts with php74-gd-7.4.27 on /usr/local/include/php/ext/gd/gd_compat.h - php80-exif-8.0.17_2 conflicts with php74-exif-7.4.28_2 on /usr/local/include/php/ext/exif/config.h - php80-exif-8.0.17_2 conflicts with php74-exif-7.4.27 on /usr/local/include/php/ext/exif/config.h - php80-pecl-imagick-3.5.1 conflicts with php74-pecl-imagick-3.5.1 on /usr/local/include/php/ext/imagick/ImagickKernel_arginfo.h - php80-ftp-8.0.17_2 conflicts with php74-ftp-7.4.28_2 on /usr/local/include/php/ext/ftp/config.h - php80-ftp-8.0.17_2 conflicts with php74-ftp-7.4.27 on /usr/local/include/php/ext/ftp/config.h - php80-curl-8.0.17_2 conflicts with php74-curl-7.4.28_2 on /usr/local/include/php/ext/curl/config.h - php80-curl-8.0.17_2 conflicts with php74-curl-7.4.27 on /usr/local/include/php/ext/curl/config.h - php80-tokenizer-8.0.17_2 conflicts with php74-tokenizer-7.4.28_2 on /usr/local/include/php/ext/tokenizer/config.h - php80-tokenizer-8.0.17_2 conflicts with php74-tokenizer-7.4.27 on /usr/local/include/php/ext/tokenizer/config.h - php80-mysqli-8.0.17_2 conflicts with php74-mysqli-7.4.28_2 on /usr/local/include/php/ext/mysqli/php_mysqli_structs.h - php80-mysqli-8.0.17_2 conflicts with php74-mysqli-7.4.27 on /usr/local/include/php/ext/mysqli/php_mysqli_structs.h - php80-zlib-8.0.17_2 conflicts with php74-zlib-7.4.28_2 on /usr/local/include/php/ext/zlib/php_zlib.h - php80-zlib-8.0.17_2 conflicts with php74-zlib-7.4.27 on /usr/local/include/php/ext/zlib/php_zlib.h - php80-zip-8.0.17_2 conflicts with php74-zip-7.4.28_2 on /usr/local/include/php/ext/zip/php_zip.h - php80-zip-8.0.17_2 conflicts with php74-zip-7.4.27 on /usr/local/include/php/ext/zip/php_zip.h
WordPressさえ動けばPHPバージョンなんて古くて構わないのですが、問題はセキュリティ。WordPressは外への窓口なのでここでいったん中止しても、近日中に8.0系に上げざるを得ないという結論になり、FreeBSDパッケージの更新処理を続けることにしました。
PHPバージョンアップ直後のトラブル
パッケージ自動更新だけで更新ができるならいいのですが、過去PHP5系から7系への更新、7.2系から7.4系への更新などで、PHPソースがそのまま表示されてしまったり、真っ白なページが表示されたり、大型更新後は必ずトラブりまくってくれます。結局、手作業が必要になります。
だいたいは、
- PHPソースがそのまま表示される
- 画面が真っ白になる
- データベースと接続できない
と、この3つの症状に集約され、対処方法も、
- mod_phpバージョンがミスマッチ、または、道連れ削除されてしまった
- httpd.conf が旧バージョンのままで、編集が必要
- 必要なPHPモジュールが入っていない
のいずれか、または複合パターンであることがわかってきました。(WordPressのサポートバージョンとのミスマッチは除きます。あくまでも、対応しているバージョンであること。)
自動更新が終わって、まずは、自動更新されなかった mod_php パッケージを手動で更新。
mod_php74 → mod_php80
続いて、httpd.conf のphpハンドラー部分を確認して編集。
LoadModule php_module libexec/apache24/libphp.so
上の行は、自動的に更新されていたので、残りの
AddHandler php7-script .php
を
AddHandler php8-script .php
に編集。
これでいいはずなので、apache24 と念のために mysql-server を再起動。
そして、WordPress トップ画面をアクセスしてみると、、、、、、、
真っ白。
が~ん。結局、やっちまったよ~。
本番サイトではないとはいえ、焦る。
真っ白ページの、ソースコードを見てみると、PHPコードが表示されました。
HTMLヘッダー書式なので、画面が真っ白になっているわけ。
要するに、PHP→HTMLの変換作業が失敗しているので、原因は、mod_php か PHP8 のインストール関係か、httpd.conf の書式ってことになります。
しかし、一つ一つファイルを確認して行っても不足ファイルは無し。httpd.conf も上記のように編集しています。
1時間くらい悩みました。
そして、PHP更新前の本番サーバーの httpd.conf と比較してみたところ、
<php7用記述> LoadModule php7_module libexec/apache24/libphp7.so <php8用記述> LoadModule php_module libexec/apache24/libphp.so
php8用記述に「8」の文字が無い!
まさか、と思って、
AddHandler php-script .php
と、httpd.conf の記述から、php8-script の「8」の文字を削除して、Apacheを再起動してみると、、、、
元に戻りました!
ページが正常表示される!
勘弁してくれ~。こんなところ気づけないよ~。なんで、こういうバージョン関係の記述ルールを変えるかねぇ~。
これはhttpd.confの書式なのでWordPressが原因ではなく、Apacheの問題なんですが、いつものようにメジャーバージョンアップに伴う、大幅時間ロス。
こういうCMS系のバージョンアップって大嫌い!
そうそう、ダッシュボードに表示されるWordPressイベントニュースが文字化けしていることに気づきました。