FreeBSD12: PHPが7.4系→8.0系で、WordPress画面が真っ白に

やりたくない作業なのですが、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イベントニュースが文字化けしていることに気づきました。

これが、今のところ唯一の不具合っぽい。WordPressイベントニュースが文字化け

コメントを残す