PHP7・WordPress5アップデート問題! Exec-PHPをPHP7環境で使う例!

WordPressでPHPを実行するプラグイン『Exec-PHP』だけど、もう数年更新されていない…。
あれからPHPは7になってしまった。
当然PHPのバージョンが変わったことで問題が起きる

なので、主にPHP5からPHP7に変えることで起こる問題点と解決方法。
及び使えるようになるまでの方法を記載しておく。

問題点はどうでもいいので、PHP7で使えるExec-PHPを使いたいという人向けに、PHP7対応Exec-PHPプラグインを公開中
自己責任でご使用ください。

『=& new クラス名』は使えない

『=& new』を全て『= new』に変換する。
PHP7からは使用してはいけないルール。

変えてもPHP5でも問題なく使えるから、気前よくプラグイン内全部変えちゃってください。
これだけで使えるようにはなる。

『クラス名と同じメソッド名』は使えない

class起動と同時にやって欲しい処理は、class名と同じfunctionに書いていたと思う。

例えばこんな感じ。

class my_create {
 function my_create () {

これがPHP7では使ってはいけない。

上記の場合は、下記のように修正する。

class my_create {
 function __construct(){

今回のプラグインでは、該当箇所はなかった。

ついでExec-PHPの不都合な部分を直す ※PHP7関係ではない

ついでに、今まで発見した不都合な部分を直していく。
ここはPHP7関係の問題ではないので、無視してOK!
全て『exec-php』以下を修正。

includes/runtime.php

42行目くらいのevalに構文エラーが出るけど、処理は走るwarninngなので頭に『@』つけてスルーにしておく。

@eval("?>$content<?php ");

『get_usermeta』を『get_user_meta』に変える

WordPress現行バージョンにおいて、『get_usermeta』は推奨されない。
現バージョンでは『get_user_meta』。
いずれタグが使えなくなり、原因がわからなくなる前に対処が必要。

includes/cache.php:行34

function &get_usermeta($user_id)

も含めて5か所すべて修正する。一括変換でOK。

moreタグが付くときの問題対応をプラグインにまとめる

どんな問題なのかは下記をご参考ください。
『Exec-PHPで<!--more-->があるとphp実行されない問題』
exec-php.phpの『require_once(dirname(__FILE__).'/includes/manager.php');』の後、下記を追加する。

function execphpstart($text) {
	return str_replace("< ?php","<?php",$text);
}
add_filter('the_content', 'execphpstart',1);

まとめ

PHPバージョン問題でもWordPressバージョン問題でも、多分エラーメッセージは出ようが、しばらくは使わせてくれると思う。
なので、そう慌てることはしなくていいが、直せるうちに直しておかないと急に原因不明のエラーとなる。
出来れば今、直しておこう!

コメント

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