[WirdPress]PHP7.1でエラーが発生「Exec-PHP」を修正

レンタルサーバーの設定を変えて、PHPのバージョンを7.1に変更すると、突如エラーが発生しました。

Parse error: syntax error, unexpected ‘new’ (T_NEW) in /xxxx/wp-content/plugins/exec-php/exec-php.php on line 22

これは、投稿記事内でPHPのコードを実行出来るようにするプラグイン「Exec-PHP」がPHP7.1以降に対応していないためのエラーです。
PHP7.1では、変数にクラスの参照代入ができなくなったためだそうで、プラグインのソースコードそのものに問題があることを示しています。

対策として、代わりのプラグインも試しましたが、同様にエラーが出たり、古すぎてWordPressの管理画面からは探せなかったりしてイマイチ。

ということで、ひとまず、Exec-PHP のコードそのものを変更して対処することにします。
プラグインのコードを変更するにはFTPクライアントなどから直接ファイルを開きます。
まずは、エラーの出ている、exec-php.phpを編集。

/wp-content/plugins/exec-php/exec-php.php

このファイルの22行目に、

$GLOBALS['g_execphp_manager'] =& new ExecPhp_Manager();

とありますので、 =& の &を削除します。

$GLOBALS['g_execphp_manager'] = new ExecPhp_Manager();

でも、これをしてもまた新たなエラーが発生します。

Parse error: syntax error, unexpected ‘new’ (T_NEW) in /xxxx/wp-content/plugins/exec-php/includes/manager.php on line 36

こんどは、manager.phpに問題があるようです。
/wp-content/plugins/exec-php/includes/manager.php
を開くと、36,37,38,39行目に同様に=&があります。

$cache =& new ExecPhp_Cache();
 $this->m_ajax =& new ExecPhp_Ajax($cache);
 $this->m_runtime =& new ExecPhp_Runtime($cache);
 $this->m_admin =& new ExecPHP_Admin($cache);

これも&を削除します。

$cache = new ExecPhp_Cache();
 $this->m_ajax = new ExecPhp_Ajax($cache);
 $this->m_runtime = new ExecPhp_Runtime($cache);
 $this->m_admin = new ExecPHP_Admin($cache);

他にも、

/wp-content/plugins/exec-php/includes/cache.php の22行目、39行目
/wp-content/plugins/exec-php/includes/ajax.php の64行目

にそれぞれ &= となっているところがあるので修正します。

これでエラーは出なくなります。

 

nakaike