compilando o PHP 5.4 e superior com o MySQL

1

Estou executando uma pilha de instâncias do mediawiki no Oracle enterprise Linux e estou tentando atualizar de 1.19.x para a versão mais recente do LTS, 1.23.x. Atualmente estou usando o PHP 5.3 e devido a alguns problemas estranhos com páginas especiais e miniaturas, foi recomendado atualizar o PHP para 5.4 ou superior.

./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

o problema que tenho é que minha compilação de PHP continua falhando com erro:

error: Cannot find MySQL header files under /usr/include/mysql.

aqui é onde fica estranho:

$ cd /usr/include/mysql
$ ll | grep mysql.h
-rw-r--r-- 1 root root 28148 May 11 2011 mysql.h

claramente os arquivos de cabeçalho estão presentes.

aqui é onde fica ainda mais estranho: se eu puxar uma cópia do PHP 5.3 tar, extraí-lo e executar o comando exatamente igual à compilação , ele é bem-sucedido.

Eu sei que entre PHP 5.3 e 5.4 o PHP foi movido de libmysqlslient para mysqlnd [o que quer que isso signifique], mas de acordo com seu manual os argumentos de compilação não mudaram.

link

então pensei que deveria ser a mudança para o mysqlnd. então eu testei isso compilando 5.3 com o mysqlnd, e isso foi bem sucedido!

--with-mysql=mysqlnd --with-mysql=/usr/include/mysql

Eu também tentei PHP 5.6 no caso de algo quebrado foi corrigido, mas que também falha com o erro não é possível encontrar arquivos de cabeçalho.

Não sei para onde ir a partir daqui.

    
por zee 10.12.2014 / 17:31

1 resposta

2

do arquivo de configuração do 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

do php 5.4 e 5.6 configure:

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

o erro é enganoso, pois simplesmente imprime o que você digitou; $PHP_MYSQL e não diz que está realmente procurando $PHP_MYSQL/include/mysql/mysql.h e $PHP_MYSQL/include/mysql.h , que no meu caso se traduz em /usr/include/mysql/include/mysql/mysql.h e /usr/include/mysql/include/mysql.h

escusado será dizer que a resposta é:

./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
    
por 10.12.2014 / 22:05