私はOracle Enterprise Linuxで複数のMediawikiインスタンスを実行しており、1.19.xから最新のLTSバージョン1.23.xにアップグレードしたいと思います。私は現在PHP 5.3を使用していますが、特別なページとサムネイルに関するいくつかの奇妙な問題のためにPHPを5.4以上にアップグレードするように助言されています。
./configure --prefix=$PRE --with-config-file-path=$CONFIG_FILE_PATH --with-mysql=/usr/include/mysql --with-apxs2=$PRE/apache/bin/apxs --with-zlib --with-jpeg-dir --with-gd --with-iconv-dir --with-libxml-dir=/usr/local/bin --enable-mbstring
私が経験している問題は、PHPコンパイルが次のエラーのために失敗し続けることです。
error: Cannot find MySQL header files under /usr/include/mysql.
ここが変になります。
$ cd /usr/include/mysql
$ ll | grep mysql.h
-rw-r--r-- 1 root root 28148 May 11 2011 mysql.h
明らかにヘッダファイルが存在します。
見知らぬ人でも:PHP 5.3 tarのコピーを抽出したら、解凍して実行してください。まったく同じ編集コマンドが成功しました。
私はPHP 5.3と5.4の間でPHPがlibmysqlslientからmysqlndに移動したことを知っていますが(それが何を意味していても)、マニュアルによると、コンパイルパラメータは変更されませんでした。
http://php.net/manual/en/mysql.installation.php
だからmysqlndの変更は間違いないと思います。だから私はmysqlndを使って5.3をコンパイルしてテストしましたが、うまくいきました!
--with-mysql=mysqlnd --with-mysql=/usr/include/mysql
また、いくつかの破損した問題が解決される場合に備えてPHP 5.6を試してみましたが、ヘッダーが見つからないというエラーが原因で失敗しました。
ここでどこに行くべきかわかりません。
答え1
PHP 5.3設定ファイルでは:
if test "$PHP_MYSQL" = "mysqlnd"; then
PHP_MYSQLND_ENABLED=yes
elif test "$PHP_MYSQL" != "no"; then
MYSQL_DIR=
MYSQL_INC_DIR=
for i in $PHP_MYSQL /usr/local /usr; do
if test -r $i/include/mysql/mysql.h; then
MYSQL_DIR=$i
MYSQL_INC_DIR=$i/include/mysql
break
elif test -r $i/include/mysql.h; then
MYSQL_DIR=$i
MYSQL_INC_DIR=$i/include
break
fi
done
if test -z "$MYSQL_DIR"; then
{ echo "configure: error: Cannot find MySQL header files under $PHP_MYSQL.
Note that the MySQL client library is not bundled anymore!" 1>&2; exit 1; }
fi
PHP 5.4および5.6の構成:
if test "$PHP_MYSQL" = "yes" || test "$PHP_MYSQL" = "mysqlnd"; then
PHP_MYSQLND_ENABLED=yes
elif test "$PHP_MYSQL" != "no"; then
MYSQL_DIR=
MYSQL_INC_DIR=
if test -r $PHP_MYSQL/include/mysql/mysql.h; then
MYSQL_DIR=$PHP_MYSQL
MYSQL_INC_DIR=$PHP_MYSQL/include/mysql
break
elif test -r $PHP_MYSQL/include/mysql.h; then
MYSQL_DIR=$PHP_MYSQL
MYSQL_INC_DIR=$PHP_MYSQL/include
break
fi
if test -z "$MYSQL_DIR"; then
as_fn_error $? "Cannot find MySQL header files under $PHP_MYSQL.
Note that the MySQL client library is not bundled anymore!" "$LINENO" 5
fi
このエラーは、ユーザーが入力した内容だけを印刷して$PHP_MYSQL
実際に探していることを知らせないため、誤解を招くおそれがあります。私の場合は and に翻訳されます。$PHP_MYSQL/include/mysql/mysql.h
$PHP_MYSQL/include/mysql.h
/usr/include/mysql/include/mysql/mysql.h
/usr/include/mysql/include/mysql.h
言うまでもなく答えは次のとおりです。
./configure --prefix=$PRE --with-config-file-path=$CONFIG_FILE_PATH --with-mysql=/usr --with-apxs2=$PRE/apache/bin/apxs --with-zlib --with-jpeg-dir --with-gd --with-iconv-dir --with-libxml-dir=/usr/local/bin --enable-mbstring