はじめに
こちらの記事で、WordPressのサーバー間データ移行を行った
その際に移行元と移行先でPHPのバージョン違いなどにより発生した
本記事ではその修正方法について記す
環境情報
移行元サーバー
PHP:5.6.40
WordPress:5.1.19
移行先サーバー
PHP:8.3.14
WordPress:6.6.2
エラーの修正
create_functionの廃止
create_functionメソッドはPHP7.2で非推奨となり、PHP8で削除された
PHP8以降では代わりに無名関数を使用する必要がある
- add_filter( 'フィルター名', create_function('$a', "return '<p>これはテストです</p>';") );
+ add_filter( 'フィルター名', function($a){return '<p>これはテストです</p>';});
参考
エスケープされない「・・・」の記述
「・・・」がエスケープされずそのまま使用されている場合、PHPは未定義の定数として解釈してエラーとなる
PHP7以降では未定義の定数に対して厳格なエラーが出やすくなっているため、発生しやすい
(以下の記述はそもそもエラーの可能性が高そうだが...)
- <p><?php $title = 'test'; echo $title. ・・・ ; ?></p>
+ <p><?php $title = 'test'; echo $title. '・・・' ; ?></p>
&= newの記述
PHP 5以降、新しいオブジェクトを作成する際に参照渡しを明示する必要はなくなった
&= new
という書き方は非推奨となり、PHP 7以降ではエラーになる
- <?php $test =& new test_class();
+ <?php $test = new test_class();
参考
短縮タグの変更
PHP5.3以下ではPHPのshort_open_tagがデフォルトでOnとなり、短縮タグが利用できていた
PHP7以降ではshort_open_tagがデフォルトでOFFとなり、そのままだとエラーになる
そのため、short_open_tagがOnにするか短縮タグを利用しないようにする必要がある
- <? if($bool): ?>foo<? endif; ?>
+ <?php if($bool): ?>foo<?php endif; ?>