MySQL을 사용하여 PHP 5.4 이상 컴파일

MySQL을 사용하여 PHP 5.4 이상 컴파일

저는 Oracle Enterprise Linux에서 다수의 미디어위키 인스턴스를 실행하고 있으며 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

관련 정보