WordPress: Fatal error: Uncaught Error: Call to undefined function filter_input()

今回は非公開テストサーバーの更新。

一台のサーバーでのPHP7.4→8.0 へのバージョンアップが終わったので、別のWordPressサーバーも PHP8.0に上げておくことにし、作業を開始したところ、またまたトラブル。

ほぼ同じ設定のサーバーなのに、WordPressトップページをアクセスしたところ、

Fatal error: Uncaught Error: Call to undefined function filter_input() in 以下省略

が発生。

トラブル箇所が filter_input() と出ているので、おそらく filter という名称のモジュールが入っていなくてエラーになっている可能性があります。

pkg search filter

で、確認してみると、

php80-filter-8.0.17_2          The filter shared extension for php

というパッケージが見つかりました。名前が近いのでこれをインストールしてみたところ、不完全ながらWordPress レイアウトのページが表示されるようになりました。

先ほど更新したサーバーには、この php80-filter パッケージは入っていないんですけどねぇ。不思議。

残りの問題メッセージは、以下。

Warning: The magic method Automattic\WooCommerce\Admin\FeaturePlugin::__wakeup() must have public visibility in 以下省略

テストサーバーなので、DNSに名前が無いためなのかもしれませんが、PHP更新前は問題なかったはずなんですが。メッセージの内容から、WooCommerce がエラーを出しているような感じなので、一旦、WooCommerceを削除してみようと、WordPressダッシュボードにログインしようとして、同じエラーでログインさえできないことが判明。(これはやばい!)

こっちのWarningメッセージを検索してみたところ、対象ファイルの指定行の記述を private から public に編集すれば解決すると、wordpress.org のサポート掲示板に書いてありました

プラグインのソースコードを編集するの???公開サーバーなら絶対にやらないところですが、テストサーバーだし、ダッシュボードにさえログインできないと先に進めないし、ただの編集ですから元に戻すこともできるので、この方法を試してみたところ、、、、見事解決!
ダッシュボードにログインできたので、先ほど更新したサーバーと挙動が異なる理由もわかりました。

テストサーバーのため、しばらくWordPressを更新しておらず、公開サーバーは ver. 5.9.x なのに対し、テストサーバー では、ver. 5.6 が動いていたためのようです。要するに、PHPとWordPressのバージョンがかなり離れていたため。

また、SuperCacheを使っていたため、ソースコードが大幅に異なる古いキャッシュの内容を使っていたようです。

これらの要因で、数時間前にPHP8.0への更新を行ったサーバーと挙動が大きく異なったと推測しました。

そして、上記の手動で編集したWooCommerceプラグインのソースファイルは、WordPressプラグインの更新で、一瞬にして消滅しました。

前の PHP7.4→PHP8.0の更新手順に関しては特に問題なさそうです。

コメントを残す