2016年4月27日水曜日

PHP7 で破棄された関数によるWordPressの問題編(1)mysql_real_escape_string / set_magic_quotes_runtime #wordpress

1つの WordPress を nginx + PHP7 な環境に移行しました。
ここでは PHP7 周りでおっとっと、、という事例について備忘録ついでに紹介していきます。今回は、「mysql_real_escape_string」です。


mysql_real_escape_string は PHP7から廃止された!

のでこの関数をつかっている場合にはエラーが出ます。
この関数は、MySQLデータベースにSQLクエリを渡すときに特殊文字をエスケープする関数です。esc_html などと同じような感じですね!

ログには
  • 2016/04/27 11:33:38 [error] 23763#0: *1 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function mysql_real_escape_string() in 使っているPHP(パス含む)

という感じで出ます。

mysqli_real_escape_string に変更せよ!


ということで解決できます。
ただし、第1引数にMySQL DBへの接続設定が必要です。そうじゃなくて、SQLのエスケープだけがしたい!!ってことなら、 esc_sql 関数を使いましょう(2016年5月4日追記)。
この関数は、PHP5 以上なら実装されてます。

今回引っかかったのは、<旧>WordPress Download Monitor


※ WordPress Download Monitor はいつの間にか、他のプラグインに置き換わっていました T_T; 前は、 Mike Jolley さんが作成、現在のものは Never5さんですね.. ぐむむ

「アップロード & 保存」というボタンを押したら、nginx君がエラーを吐きました。
ログを見て調べていくと

  • admin/addnew.php
  • admin/admin.php
  • uploader.php
の三箇所に、2つずつ mysql_real_escape_string関数が使われていました。これを変更することで暫定回避。

もちろん抜本解決には、プラグイン側で直してもらわないといけません。
今回はプラグイン自体は動作していて、しかし実際にファイルをアップロードする際にエラーになるという即時対応が必要というわけじゃないので、とりあえずフォーラムにて
にて指摘しておきました。

あと

set_magic_quotes_runtime も廃止されてる!

これは
  • download.php
      set_magic_quotes_runtime(0); 
という形で使われていました。これはコメント(削除)で対処


ふ〜

2016年4月27日 @kimipooh
2016年5月4日 追記


0 件のコメント:

コメントを投稿