プログラミング初心者にオススメ

LION BLOGを使用中に重大なエラーが発生!PHP8.1に対応してないことが原因

5年くらい前に「LION BLOG」を使用してあるブログを作ったんですね。
最近そのブログから重大なエラーが発生してるよってメールが届いたので内容確認したところPHP8.1へのバージョンアップに伴うエラーでした。

ブログ自体は全然更新してないしアクセス数もないのでいいんですが何となく気になったのでエラー対応してみました。

今回の方法はLION BLOG公式が出してるものではないのでもし同じようにやってみる人がいる場合は自己責任でお願いします。

どんなエラーが出てたか

エラーはこんな感じです。

Fatal error: Uncaught Error: Call to undefined function create_function()

create_function()という関数がないよーって言われてますね。

調べてみるとこのcreate_function()という関数がPHP8.1では削除されたみたいです。

https://www.php.net/manual/ja/function.create-function.php

なのでテーマの中で使用されているcreate_function()を代わりのものに置き換える必要があります。

create_function()は2箇所で使用されている

LION BLOGのテーマのコードを検索するとcreate_function()が使われているところが2箇所あります。

functions.phpの4514行目と4611行目です。

PHP functions.php 4514行目
add_action( 'widgets_init', create_function( '', 'return register_widget( "AdWidgetItemClass" );' ) );
PHP functions.php 4611行目
add_action( 'widgets_init', create_function( '', 'return register_widget( "Popular_Posts" );' ) );

解決方法

create_function()を無名関数に置き換える

create_function()は動的に関数を作成する関数です。

PHP8.1では無名関数が使えるので以下のようにadd_actionの第二引数に直接関数を渡します。

PHP functions.php 4514行目
add_action( 'widgets_init', function() { return register_widget( "AdWidgetItemClass" ); } );
PHP functions.php 4611行目
add_action( 'widgets_init', function() { return register_widget( "Popular_Posts" ); } );

これでエラーが出なくなりブログが正常に動作しました。

最後に

今回の対応は公式がサポートしているやり方ではないのでもし同じ対応をする場合には自己責任でお願いします。
サイトを復旧させたい場合などの応急処置には良さそうですが実運用するには望ましくないと思われます、、、

今後も同じようなエラーが出てくると思いますので早めに他のテーマに変更するのがおすすめです。