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に対応したバージョンをアップデートしてくれればファイルをいじる必要はなくなり安心なのですが。とりあえずの対処法でした。
![](https://www.islog.jp/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)
![](https://www.islog.jp/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)
コメント