PHP5.5でWordPressのWP_DEBUGを有効にするとmysql_connectつかうなと怒られる

先週末にustでみたPHPカンファレンス 2013+WordCampのライトニングトークでマスク・ド・レガシー氏がWordPressのコードはレガシーでヤバイかもしれないと発表していた。これには全面的に賛同せざるを得ない。開発環境をPHP5.5にあげたらさっそく問題に遭遇した。マスクマンは無事に帰れただろうか。

なおWordPressはこれを書いている時点で最新の3.6.1。

WordPressで WP_DEBUG を有効にするともれなく以下の警告が発生する。

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in 
wp-includes/wp-db.php on line 1142

暫定対策としてDeprecatedのエラーを非表示にする場合、 wp-includes/load.php を直接いじるか、wp_debug_modeが呼ばれた後の何かしらのアクションで error_reporting( E_ALL ^ E_DEPRECATED); 呼び出すかである。とりあえず開発環境なので wp-includes/load.php の263行あたりを修正した。

wp-includes/load.php
function wp_debug_mode() {
    if ( WP_DEBUG ) {
//      error_reporting( E_ALL );
        error_reporting( E_ALL  ^ E_DEPRECATED);

基本的にはPDOに置き換えるべきで、WordPressではデータベース処理はwp-db.phpでカプセル化されているので実装はそれほど難しくないと思うが、問題はユーザ環境によってPDOやPDO_mysqlが必ずしも有効になっているとはかぎらないところにあり、おそらく慎重にならざるを得ないだろう。WordPressのレガシコードはしばらく続く予感。

人見知りソフトウェアエンジニアです。ビジュアル系、お笑い、Pixarが好き。勢いで吉本超合金おたけびBOTを作った。オールザッツ漫才が放送されない東京在住。

趣味や日常からアウトプットの場としてブログを書いています。自作のWordPressプラグインにGitHub Flavored MarkdownAmazonJSなど。