pecl install pdo pecl install pdo [pdo_dbh.lo] Error 1とすると、エラーで止まる。
2011.07.12: 解決しました!!
pecl upgrade timezonedbとtimezonedbを念のためアップグレードした上で、 php.iniあるいは、/etc/php.d/timezone.ini(デフォルト設定)などに、
extension=timezonedb.soを入れて、
php -r 'timezone_identifiers_list();'でSegmentation Faultが出ないことを確認の上、Apacheを再起動すればいい!!
結論から先にいうと、Olson Time zone databaseを使っているため、PHP5.3で新たに加わった関数(timezone_identifiers_list)を呼ぶと深刻なエラーになってしまうことです。
この現状になるケースは、yumなどでphpをupdateするときに、--with-system-tzdataの特殊オプションをつけてコンパイルされている場合です。
(例)php -r 'var_dump ( timezone_identifiers_list() );'を実行して
「Segmentation fault (core dumped)」が出たらこの問題になっているということです。
php[31640]: segfault at 0000000000000004 rip 000000000042245c rsp 00007fffd2057380 error 4のようにでます。
ソースからコンパイルすることでうまくいきますが、yumなどで管理していてそれが難しいのなら、暫定回避方法としては、
wp-includes/function.php 「function wp_timezone_supported()」内の $support = true; を $support = false;に書き換えることです。これは、Wordpressの本体バージョンアップ時ごとにする必要があります
php -r 'print sqlite_escape_string("a");'とコマンドラインから実行して
PHP Fatal error: Call to undefined function sqlite_escape_string() inというエラーが出てきたら、sqliteが入っていません。
cd 展開フォルダ/ext/sqlite phpize make make install
if (version_compare(PHP_VERSION,"5.3.0",">")){ if(!function_exists('sqlite_escape_string')){ function sqlite_escape_string($src, $db_name=""){ if(defined('SQLITE_DATA_PATH')) $db_name = SQLITE_DATA_PATH; if(empty($db_name) || empty($src)) return false; $db = new SQLite3($db_name); $tmp = $db->escapeString($src); $db->close(); return $tmp; } } }そして、データベースファイルの絶対パスを「SQLITE_DATA_PATH」で定義するか、第2引数に入れましょう。
a. [定義する方法](PHP5.2などで利用していた従来関数を触らずに済ます方法) - define('SQLITE_DATA_PATH', 'aaaaaa.db'); - $escape_string = sqlite_escape_string($string); b. [引数として入れる方法] - $escape_string = sqlite_escape_string($string, 'aaaaaa.db');PHP5.3でのSQL文のエスケープは、SQLite3クラスのescapeStringメソッドで処理できるようになりました。その替わりか、sqlite_escape_stringが消えてます(バグかもしれませんが)。後方互換がいきなり消えるのはいただけませんし、単なるバグならそのうち復活するかもしれません。復活してもOKなように、コードを組んでます。
# yum update pcre # /etc/init.d/httpd restart # php -r 'phpinfo();' | grep pcreこれでバージョンが8.11になっていたらOK。
[Tue Feb 22 17:16:25 2011] [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=??