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