PHP7.1で「Warning: A non-numeric value encountered in」の対処法
- WordPress
- 投稿者:WEB上手 | 2017年6月13日
この記事を簡単に書くと…
- PHP7.1は7.0に比べて「OPcache」周りで速くなっている?
- PHP7.1でWarning: A non-numeric value encountered inのエラーが表示
- 「media.php」を修正することでエラー(警告)は出なくなる
エックスサーバーでPHP7.1が導入されていました。
PHP7.0や7.1は、PHP5系統と比較すると2倍以上の実行速度を誇るそうです。サイトの表示速度は、色々な面でとても重要なので、PHP7.0を使っておきたいところです。とはいえ、互換性の問題もあるので、バージョンアップは慎重に行いましょう。
>> WordPressを高速化。PHP7に変更する際のテーマやプラグインの注意点
そして、7.0と7.1は何か変わったのでしょうか。。。
こちらのサイトでは「OPcache」周りで改善されているとの情報が書かれていました。
・PHP 7.1でOPcacheがすごい速くなってた
http://qiita.com/hnw/items/50ecd4dc69fe0a48f003
「Similar Posts」でエラー(警告)が表示
少しでも、レスポンスが改善されるなら、ということでPHP7.1にバージョンの切り替えを行ってみたところ。。。 WordPressの関連記事を表示させるプラグイン「Similar Posts」の表示の際に「Warning: A non-numeric value encountered in ~~ /wp-includes/media.php on line 647」というエラー(警告)が表示されるようになってしまいました。何やら「media.php」の647行目でエラー(警告)が発生しているようです。
これはPHP7.1からの変更点で、数値ではない値で演算を行うと警告が表示されてしまうみたいですね。「media.php」の647行目を見てみると、以下のような演算が行われています。おそらく「$expected_size」が文字列として扱われてしまっているので「(int)$expected_size」というように、型を指定してあげます。これでエラー(警告)は表示されなくなりました。
$matched = ( abs( $constrained_size[0] – $expected_size[0] ) <= 1 && abs( $constrained_size[1] – $expected_size[1] ) <= 1 );
↓
$matched = ( abs( $constrained_size[0] – (int)$expected_size[0] ) <= 1 && abs( $constrained_size[1] – (int)$expected_size[1] ) <= 1 );
今回の場合は、メディア(写真)のサイズなので、「int型」(整数)で良いと思うのですが、「(float)」を指定しても警告は表示されなくなりました。間違えている場合には、ご指摘していただけますと幸いでございます。
7.0と7.1のレスポンスの違いは分からない程度
さて、PHP7.1になり、肝心のサイトのレスポンスはどうでしょう。
サイトの表示速度を計測できる「GTmetrix」で計測してみました。
複数のサイトで計測した結果は、「PageSpeed Score」が1%上がるか、もしくは上がらないか、といったところでした。そこまで大幅な改善は見られなかったようです。実際の体感速度も違いが分からない程度でした。
今回、「media.php」を直接修正したので、WordPressの更新があった際には、元に戻ってしまう可能性があります。その為、このエラー(警告)が、WordPress側で修正されるまで、毎回手作業で修正する必要があります。
その手間を考慮すると、しばらくはPHP7.0を使っていた方が良いかもしれませんね。
PHP7.1にしたからといって、そこまでの体感速度も変わらないので。。。
とはいえ、手作業の手間よりも少しでも速度を重視するというなら、PHP7.1にバージョンアップしても良いかと思います。
まとめ
PHP7.0からは、下位互換性のない部分も多いので、万が一の時には戻せるようにしておきましょう。
コメントする