Vicuna不具合への応急処置のメモ

前々回、エックスサーバーでPHPを7.1へ、MySQLを5.5へバージョンアップしたら、Wordpressが動かなくなったという話を書いた。原因は、ぼくがその時点でつかっていたwp.vicunaというテーマがすでにかなり古くなっており、一部の関数を読んでくれなくなったことにあるようだった。

エックスサーバーでPHPとMySQLのバージョンアップをおこないました。前者は7.1へ、後者は5.5へ。しかしバージョンアップ後、いくらか表...

そのさいに応急処置的に施した手順について、覚え書きとしてあげておく。まずはMySQLのバージョンアップにかかわる手順から。

MySQL5.5へのバージョンアップ後にしておくこと

エックスサーバーのばあい、同社が提供している移行ツールをつかって(サーバパネル内に項目がある)MySQLにバージョンを5.0から5.5へアップできる。作業は難しくない。ただしこの作業だけでは動かない。ブラウザでアクセスしても「データベース接続確立エラー」と表示されてしまう。

これを回避するために、移行したあと以下の作業をおこなう。

FTPでじぶんのサイトにアクセスして、wp-config.phpというファイルを見つける。ネットで調べたところ、このファイルはドメイン直下のpublic_htmlフォルダ内にあることが多いとの話だったが、ぼくのばあいはWordpressが格納されているディレクトリ内にあった。

このwp-config.phpをダウンロードし、エディタで開く(あるいはFTPアプリから直接エディタを起動して開ける)。すると、わりに前のほうの箇所、ぼくのばあいだと32行目と33行目に、「MySQLのホスト名」という記述がある。「ほとんどの場合変更する必要はありません」と注釈が書かれているが、今回は該当しない。つまり変更が必要。

「mysql***.xserver.jp」という記述があるので(***は各自の設定によって異なる)、「a」の一文字を書き足して「mysql***a.xserver.jp」と修正して保存、アップロードする。

なお読者にわかりやすくするため、ここでは「a」を赤色にしてみたが、実際のコードの記述には関係ない。

修正前:


/** MySQL のホスト名 (ほとんどの場合変更する必要はありません。) */
define('DB_HOST', 'mysql***.xserver.jp');

修正後:


/** MySQL のホスト名 (ほとんどの場合変更する必要はありません。) */
define('DB_HOST', 'mysql***a.xserver.jp');

ふつうは、このあとブラウザでアクセスすればちゃんとWordpressの画面が表示されるみたいである。しかし、ぼくのばあいはそうはいかなかった。

テーマが読み込めないときの対処法

ブラウザでアクセスしてもエラーが出てしまうのだ。最初はちょっと焦ったが、エラーの文面をよく読むと、Parse error: syntax error, unexpected ‘new’ (T_NEW) in… とかなんとか書いてある。そして、読み込めない箇所を含むファイル名(およびディレクトリ)と問題の箇所の行番号が表示される。

ぼくのケースでは、何度もいうように、テーマとしてつかっていたwp.vicunaがもう古く、いまでは推奨されていない関数がつかわれていたのが原因だったらしい(でも詳しいことはぼくにはよくわからない)。

さて、読み込まれず引っかかっていたのは、wp.vicunaのclasses.phpというファイルの804行目だった。そこで、wordpressが格納されているディレクトリ内の theme/wp.vicuna/src/classes.php にFTPでアクセスしてエディタでひらき、当該箇所を見てみる。803行目から806行目にかけて、つぎのような記述が見つかる。


global $s;
$allsearch = &new WP_Query("s=$s&showposts=-1");
printf($text, wp_specialchars($s, 1), $allsearch ->post_count);
}

この二行目(=804行目)にある「&」を削除する。するとつぎのようになる。


$allsearch = new WP_Query("s=$s&showposts=-1");

保存して、ブラウザでアクセスしてみた。しかし残念ながら、やはりParse error: syntax error, unexpected … とエラーがでる。またかいな。

読み込めないのは同じファイルの別の行だった。こんどは831行目。それでまたclasses.phpをひらいて当該箇所を見てみる。831行目の記述はつぎのようになっている。


$paging = method_exists(&$this, "paging_{$type}")? call_user_func(array($this,

そこで、ここから同様に「&」を削除して、つぎのように修正する。


$paging = method_exists($this, "paging_{$type}")? call_user_func(array($this,

これを保存して、ブラウザでアクセスしてみたら、こんどはさいわいぶじに表示された。つまり、とりあえず動かすためには以上の二カ所を修正してやればいい、ということだ。

なお以上の作業は、つぎのサイトの情報を参考にさせていただきました。記して御礼申し上げます。

http://nekyo.wp.xdomain.jp/2016/09/08/phpのバージョンを上げてみた/

ただし不具合は残り、問題もある。あくまで応急処置

ただし不具合は残り、問題もある。たとえば、ウィジットではゼミの学生たちのtwitterの読み込みがうまくできなくなっていた。これは当面当該ウィジットをはずすことで対応することにした。読者からは見えないが、何か操作するたびに管理画面にはエラーが表示される。

とくに大きいのは、ここではあえて詳しくは書かないが、セキュリティにかんする問題である。上に記したのはあくまで、とりあえず動けばいいという状態まで復帰させるための応急処置にすぎない。動いたからといって、そのまま放置しておくのは、あまりお勧めできない。むしろ一時的にプラグインをつかってメンテナンスモードにしておくなりして、早急に新しいテーマに移行するほうがいいのではないかとおもう。

同じ境遇に陥るひとがどれほどいるのかは想像もつかないが、もしかして誰かのお役にたてる時が来るかもしれないとおもい(こないかもしれないが、それならそれでよいわけだし)、書き記しておく。