古いPHP(4系)からMySQLライブラリを参照したときのエラーの件について

つーか、恐らく知っている人はたくさんいますよね。今更?感はありますし、今更PHPの4系を使う人もいないとは思いますが。。。
でも、書いたっていいじゃない!管理人ははまったんだから!

PHPとMySQLを連携していて、PHPからMySQLのライブラリを読んだ際に、以下がapacheのログに出力されました。

File 'NONEXISTENT/charsets/?.conf' not found (Errcode: 2)
^GCharacter set '#12' is not a compiled character set and is not specified in the 'NONEXISTENT/charsets/Index' file

 

気持ち悪いので、解決しないといけないですね。。。最初は設定か何かがおかしいと思っていました。でも、改めてコンパイルしてみると以下のような記載が!!
WARNING
ん?と思ってよく見てみると、「PHP’s built-in MySQL support」の文字が。PHPに入っているMySQLを使っている?てことは、ライブラリ関係が読めていない? f(^^;)
でも、コンパイルオプションには、/usr/lib64/mysqlに入っているし、–with-libdir=lib64を付けているから64bitの方を見ているはず。。。やべっ、わがんね。と言うことではまってしまいました。

原因は…PHPが単に64bit対応になっていなかったことでした。PHPは4.4.9のソース、mysqlは最新版のrpm使ってインストールしていました。MySQLは/usr/lib64/mysql配下にライブラリを配置します。でも、PHPはlib64の下を見に行くようになっていなかったのです(-_-)
以下、原因のconfigure(62113行目辺り)

for i in lib lib/mysql; do ← ここね!!str="$MYSQL_DIR/$i/lib$MY_LIBNAME.*"
for j in `echo $str`; do
if test -r $j; then
MYSQL_LIB_DIR=$MYSQL_DIR/$i
break 2
fi

 

lib64がない!!そりゃーいくらコンパイルオプションを指定してもできないわけだ。しょうがないので、configureを書き換えてしまいました。以下、diffの結果です。

--- php-4.4.9.old/configure 2008-08-06 17:36:41.000000000 +0900
+++ php-4.4.9.new/configure 2013-07-26 13:50:30.739792672 +0900
@@ -62110,7 +62110,7 @@
;;
esac
- for i in lib lib/mysql; do
+ for i in lib lib/mysql lib64; dostr="$MYSQL_DIR/$i/lib$MY_LIBNAME.*"
for j in `echo $str`; do

これで、コンパイルしたら上手くいきました。apacheのエラーログもなくなりました♪ PHPの4系の頃には、64bitのライブラリが/usr/lib64/の配下に置かれるなんて夢にも思ってなかったのでしょうね。
うーん、古いパッケージを使うときは気をつけないといけないですね。


コメントを残す

メールアドレスが公開されることはありません。