MySQLを使用したPHP 5.4以降のコンパイル

MySQLを使用したPHP 5.4以降のコンパイル

私は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

関連情報