- PR -

php-5.2.5+mysql-5.0.51aでmysql_fetch_array がFAILD

1
投稿者投稿内容
Dr.Doraemon
ぬし
会議室デビュー日: 2002/03/23
投稿数: 265
投稿日時: 2008-03-22 13:35
お世話になっております。

RedhatEnterpriseLinux 5.1で、PHP5.2.5をインストールしようと奮闘しているのですが、./configureとmakeまでは正常に終わり、make testを実行すると以下のようにFAILDの項目が発生します。
---
date OO cloning [ext/date/tests/oo_002.phpt]
libgd #106 (imagerectangle 1x1 draws 1x3) [ext/gd/tests/libgd00106.phpt]
mysql_fetch_array [ext/mysql/tests/002.phpt]
mysqli bind_result 1 [ext/mysqli/tests/002.phpt]
mysqli fetch (bind_param + bind_result) [ext/mysqli/tests/019.phpt]
mysqli_get_metadata [ext/mysqli/tests/047.phpt]
mysqli bind_result (OO-Style) [ext/mysqli/tests/048.phpt]
htmlentities() test 2 (setlocale / fr_FR.ISO-8859-15) [ext/standard/tests/strings/htmlentities02.phpt] (warn: possibly braindead libc)
htmlentities() test 4 (setlocale / ja_JP.EUC-JP) [ext/standard/tests/strings/htmlentities04.phpt] (warn: possibly braindead libc)
htmlentities() test 15 (setlocale / KOI8-R) [ext/standard/tests/strings/htmlentities15.phpt] (warn: possibly braindead libc)
---

どれも、気になっているので一個ずつ解決したいと思っているのですが、「mysql_fetch_array」のテストが通らないのがどうも気になっています。
なにが原因で通っていないのかが全くわからない状態です。
MySQLは、ソースから以下のようにインストールしています。
---
./configure --with-charset=ujis --with-extra-charsets=all --with-mysqld-user=mysql --enable-thread-safe-client --with-charset=binary --enable-thread-safe-client --with-charset=binary
make
make install
---
MySQL自身は正常に起動しており問題ないと思っています。

ちなみに、PHPは以下の手順でビルドしています
---
./configure \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-gd=/usr/local \
--with-freetype-dir=/usr/local \
--with-jpeg-dir=/usr/local \
--with-png-dir=/usr/local \
--with-zlib-dir=/usr/local \
--with-iconv=/usr/local \
--with-libxml-dir=/usr/local \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--with-mysql=/usr/local \
--with-mysqli=/usr/local/bin/mysql_config
make
make test
---

どこから調べれば原因が解決するかの糸口がまだわからない状態です。

解決のヒントなどいただけると助かります。

よろしくお願いいたします。
Dr.Doraemon
ぬし
会議室デビュー日: 2002/03/23
投稿数: 265
投稿日時: 2008-03-23 01:47
お世話になっております。

自己レスです。

調査をしたところ、テスト結果のログが「/usr/local/src/php-5.2.5/ext/mysql/tests」内にあり、以下のような結果でエラーになっていました。

---

---- EXPECTED OUTPUT
resource(%d) of type (mysql link)
bool(true)
bool(true)
bool(true)
bool(true)
resource(%d) of type (mysql result)
array(3) {
["col1"]=>
string(1) "1"
["col2"]=>
string(3) "foo"
["col3"]=>
string(3) "bar"
}
array(3) {
["col1"]=>
string(1) "2"
["col2"]=>
string(3) "foo"
["col3"]=>
string(3) "bar"
}
---- ACTUAL OUTPUT
resource(5) of type (mysql link)
bool(true)
bool(true)
bool(true)
bool(true)
resource(6) of type (mysql result)
array(3) {
["col1"]=>
string(1) "1"
["col2"]=>
string(3) "foo"
["col3"]=>
string(5) "bar^@^@"
}
array(3) {
["col1"]=>
string(1) "2"
["col2"]=>
string(3) "foo"
["col3"]=>
string(5) "bar^@^@"
}
---- FAILED
---

どうも、Stringの結果にゴミが入っているのが問題のようです。

OSがRedhatEnterpriseLinux 5.1なのでUTF-8で動作しているけど、MySQLの文字コードが違っているためゴミが入っているのではないかと思いました。

/etc/my.cnfの、[mysqld]と[mysql]の項目に「default-character-set=utf8」を追加することで、PHPのmake testで「mysql_fetch_array」のエラーが出なくなりました。

しかし、このmake testは、結構環境依存したテストなんだなと感じました。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)