PHP7.1 移行でうまく動かなかったところ

さくらインターネットのレンタルサーバが気付いたら PHP7.1 に対応していましたので切り替えることにしました。

やっぱり大きなバージョン変更時は色々と不具合があるものですね。
Wordpress のプラグインや PHP が動かなくなりました。
気付いたところから直していますが、結構あってビックリです。

スポンサーリンク

Category Order and Taxonomy Terms Order

Fatal error: Uncaught Error: Using $this when not in object context in /wp-content/plugins/taxonomy-terms-order/taxonomy-terms-order.php:136 Stack trace: #0

上記のようなエラーを吐きます。
このエラーでサイト全体が死にます。

これの対処法は該当ファイルの136行目のコードをコメントアウトすればいいようです。

add_action( 'wp_ajax_update-custom-type-order-hierarchical', array(&$this, 'saveAjaxOrderHierarchical') );

簡単ですね。
コメントアウトによって影響があるかもしれませんが、今のところ大丈夫です。

アップデートで修正されたようですので、最新版ではこのような書き換えはしなくてもよくなりました。

WP Likes

こちらは Warning なのでサイト全体が死ぬことはありませんが、ページのレイアウトが崩れます。
このプラグインは mysql_escape_string という関数を使っているのですが、PHP7 で削除されました。

こちらは修正箇所が複数あるので省略しますが、api.php 内にある先の mysql_escape_string という関数を mysqli_escape_string という関数に置き換えます。
引数の数が変わっているので注意しましょう。
一部だけ書くと以下のようになります。

$dbc = mysql_connect('localhost' , 'root' , '');
$this->post_id=isset($req["post_id"])? (int)(mysqli_escape_string($dbc, $req["post_id"])):null;

また、api.php内のmysql_get_server_info は mysqli_get_server_info に置き換えます。
こちらは関数名だけで大丈夫です。

文字列の分割

今まで split という関数を使っていたのですが、PHP7 で削除されました。
代替の関数としては explode という関数があるようで書き換えるだけで大丈夫でした。

検索結果の表示

WP_Query を使って検索結果ページのキーワードと件数を表示しているのですが、そのままPHP7にするとエラーが出ました。

Parse error: syntax error, unexpected 'new' (T_NEW) in ...

というエラーを吐きます。

元々は以下のようなコードです。

$search_keyword = wp_specialchars($s, 1);
$my_query =& new WP_Query("s=$s & showposts=-1");
$search_counter = $my_query->found_posts

上記の2行目にある =& を = に書き換えます。
本当はどんな違いがあるかを知った上で変えたほうがいいと思いますが、動くのでとりあえず問題ないでしょう。

あと、PHP ではなく WordPress の話ですが wp_specialchars は非推奨となっているので esc_html という関数に置き換えておきましょう。
引数はそのままで大丈夫ですので、深く考えず書き換えましょう。


見つかっている問題点は以上になります。
また何か見つかり次第修正し、追記していこうと思います。

スポンサーリンク

Leave a Comment