PHPが新しいバージョンでIP GEO Blockをインストール&有効化すると、管理画面が重大なエラーが発生しましたと出て表示されなくなります。
これはPHPの仕様変更で、これまで配列の要素を示すのに中括弧が使えていたのが使えなくなったためです。
サーバのエラーログには以下のような内容が出力されます。
FastCGI sent in stderr: “PHP message: PHP Fatal error: Array and string offset access syntax with curly braces is no longer supported in /var/www/***/wp-content/ip-geo-api/ip2location/bcmath.php on line 70” while reading response header from upstream, client: ***, server: ***, request: “GET /wp-admin/admin.php?page=stats&noheader&proxy&chart=admin-bar-hours-scale-2x HTTP/2.0”, upstream: “fastcgi://unix:/var/run/php-fpm/php-fpm.sock:”, host: “***”, referrer: “***”
プラグインの該当ファイルを編集していきます。
wp-content/ip-geo-api/ip2location/bcmath.php
70 行目
$Sum=((int)$Num1{$i}+(int)$Num2{$i});
-> $Sum=((int)$Num1[$i]+(int)$Num2[$i]);
126
$Sum=((int)$Num1{$i}-(int)$Num2{$i});
->$Sum=((int)$Num1[$i]-(int)$Num2[$i]);
156,157
for($i=0;$i<strlen($Num1);$i++) {if(@$Num1{$i}!='0') {$Num1=substr($Num1,$i);break;}}
->for($i=0;$i<strlen($Num1);$i++) {if(@$Num1[$i]!='0') {$Num1=substr($Num1,$i);break;}}
for($i=0;$i<strlen($Num2);$i++) {if(@$Num2{$i}!='0') {$Num2=substr($Num2,$i);break;}}
->for($i=0;$i<strlen($Num2);$i++) {if(@$Num2[$i]!='0') {$Num2=substr($Num2,$i);break;}}
171
@$Rema[$i++%$Len2].=sprintf('%02d',(int)$Num1{$y}(int)$Num2{$x});
->@$Rema[$i++%$Len2].=sprintf('%02d',(int)$Num1[$y](int)$Num2[$x]);
177
@$Rema2[Floor(($x-1)/2)+1+$y]+=(int)$Rema[$y]{$x};
->@$Rema2[Floor(($x-1)/2)+1+$y]+=(int)$Rema[$y][$x];
194
while(strlen($Rema2)>1&&$Rema2{0}=='0') $Rema2=substr($Rema2,1);
->while(strlen($Rema2)>1&&$Rema2[0]=='0') $Rema2=substr($Rema2,1);
/wp-content/ip-geo-api/ip2location/IP2Location.php
382
if ($f_value{1} == '') { if ($f_value[1] == '') {
->if ($f_value[1] == '') { if ($f_value[1] == '') {
385
if ($f_value{0} != 'd') {
->if ($f_value[0] != 'd') {
/wp-content/plugins/ip-geo-block/includes/Net/IPv6
849
$ip{$pos} = '_';
->$ip[$pos] = '_';
ひとまずここまでやれば管理画面は表示できますが、他にも修正が必要な箇所があるかもしれません。
そのうちプラグインのバージョンアップで解決されるかと思います。





コメント