【WordPress】PHP7を使用するとW3 Total Cacheにエラーが発生

WordPress

本ページはアフィリエイトプログラムを利用しています

2015年12月にリリースされ、従来のバージョンの2倍以上の実行速度を誇るPHP7
当ブログでも、利用しているエックスサーバーで使えるようになってすぐに導入し、これまでの運用でその効果を実感しています。
高速のPHP7がXserver(エックスサーバー)で使えるようになったので即導入
しかし、新ブログをWordPressで構築する際にPHP7を導入したところ、エラーが発生するようになってしまいました。

Warning: Parameter 1 to W3_Plugin_TotalCache::ob_callback() expected to be a reference, value given in /home/サーバのpath/public_html/cpj/wp-includes/functions.php on line 3549

今回はこの原因と対処方法についてまとめます。

PHP7に記述ルールに沿っていないW3 Total Cacheのコードを修正

Warning: Parameter 1 to W3_Plugin_TotalCache::ob_callback() expected to be a reference, value given in /home/サーバのpath/public_html/cpj/wp-includes/functions.php on line 3549

あらためてエラーメッセージを確認してみます。
エラーメッセージに”W3_Plugin_TotalCache”とあるため、エラーが発生しているのはワードプレスのプラグインのW3 Total Cacheであることはすぐにわかります。
まず、下記の状況から検証してみることにしました。

  • PHP5系でW3 Total Cacheを導入 … エラーなし
  • PHP7でW3 Total Cacheを導入… エラー発生

PHP5系で構築してあるサイトでは、エラーが発生したブログと同じバージョンのW3 Total Cacheを導入していてもエラーはでていません。この時点でPHP7の利用がトリガーになっていることが濃厚ですね。
ということで、PHP7ではなくPHP5系に変更してみると……やはりエラーが発生しなくなりました。
とはいえPHP7導入するにしてもW3 Total Cacheは使いたい、と調べているとgithubに対処法がアップされていました。
https://github.com/gadelkareem/wp-w3-total-cache/commit/e71030e89f4cd666742ae2ec39451782beb42f3a
上記ではlib/W3/Plugin/TotalCache.php内の512行目の記述を、

function ob_callback(&$buffer) {

から

 function ob_callback($buffer) {

に変更しています。
&を取る形です。PHP7での記述ルールと差異があり、エラーとなっていたのでしょう。
TotalCache.phpの場所ですが、ルートからだと/wp-content/plugins/w3-total-cache/lib/W3/Plugin/TotalCache.phpにあります。
W3 Total CacheがPHP7に対応したバージョンをアップデートしてくれればファイルをいじる必要はなくなり安心なのですが。とりあえずの対処法でした。

楽天Kobo電子書籍ストア
¥2,200 (2024/11/18 09:47時点 | 楽天市場調べ)

コメント

タイトルとURLをコピーしました