PHP5.3.8で起きたコンタクトフォームのエラー

今回起きたエラーは、コンタクトフォームが突然使えなくなるというエラーでした。参考サイトではPHP5.3.4以降で起きると書いてあります。今回僕が使ったPHPは5.3.8だったため、同じようなエラーが起きる方はいるかもしれません。今回Webクリエイターズボックスさんがエラーの詳細と参考サイトを教えてくれました。ありがとうございます。

参考サイト

PHP5.3開発情報のほうに全て答えも対策も載っています。

コンタクトフォームが使えなくなる

突然コンタクトフォームが使えなくなります。プラグインのため、有効化するとエラーがでるというものになります。PHP5.2などの環境では使えても5.3.4以降にすると使えなくなるということです。Apacheのエラーログを見ると以下のようにでるそうです。

[error] [client 接続クライアントIP] PHP Warning:
 preg_replace(
) [function.preg-replace]:
Compilation failed: unknown option bit(s) set at offset 0 in
/wordpress設定の絶対パス/wp-includes/shortcodes.php on line 228, referer:
http://WordprssのURL/?page_id=??

原因:PHP5.3.4以降のpcreライブラリの互換性の問題

平たく言えば、pcreというライブラリのバージョンが古いから新しいのにしてねということです。このライブラリのバージョンはphpinfoで調べることができます。pcreは8.11以降なら問題なく動作するようです。

pcreのアップデート

普通にyum updateを使ってもいいのですが、Apacheなどでお世話になっているwing リポジトリさんのサイトで確認をして、pcreが8.20であったのでそれにしたいと思います。

# yum --enablerepo=wing update pcre
# /etc/init.d/httpd restart

アップデートをしたらApacheを再起動します。

phpinfoで確認

再起動が終わったらphpinfoで確認してみてください。pcreのバージョンが8.20になっていれば完了です。

備考

今回のエラーはPHP5.3.8で起きました。logwでPHPアップデートしたときはそれ以前だったため、そのときはこのエラーは起きておりませんでした。5.3.4以降をつかっていてエラーがでている方は実施してみてください。共用サーバーならおそらくおきないかもしれません。起きているさいはサーバー会社に連絡をして対処してもらう必要性があります。