compiling PHP 5.4 and higher with MySQL
from the php 5.3 configure file:
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
from php 5.4 and 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
the error is misleading in that it simply prints what you entered; $PHP_MYSQL
and doesn't tell you that it's actually looking in $PHP_MYSQL/include/mysql/mysql.h
and $PHP_MYSQL/include/mysql.h
, which in my case translates to /usr/include/mysql/include/mysql/mysql.h
and /usr/include/mysql/include/mysql.h
needless to say, the answer is:
./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
Related videos on Youtube
![wl_dai](https://lh4.googleusercontent.com/-v6Ef5AoPYMQ/AAAAAAAAAAI/AAAAAAAAABA/9Aeg1uiNQsM/photo.jpg?sz=256)
wl_dai
Updated on September 18, 2022Comments
-
wl_dai over 1 year
I'm running a pile of mediawiki instances on Oracle enterprise Linux and I'm trying to upgrade from 1.19.x to the latest LTS version, 1.23.x. I'm currently using PHP 5.3 and due to some odd issues with special pages and thumbnails, it has been recommended that I upgrade PHP to 5.4 or higher.
./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
the issue I have is that my compile of PHP keeps failing with error:
error: Cannot find MySQL header files under /usr/include/mysql.
here is where it gets odd:
$ cd /usr/include/mysql $ ll | grep mysql.h -rw-r--r-- 1 root root 28148 May 11 2011 mysql.h
clearly the header files are present.
here is where it gets even more odd: if I pull a copy of the PHP 5.3 tar, extract it and run the exact same compile command it succeeds.
I know that between PHP 5.3 and 5.4 PHP moved from libmysqlslient to mysqlnd [whatever that means], but according to their manual the compile arguments have not changed.
http://php.net/manual/en/mysql.installation.php
so I thought it must be the change to mysqlnd. so I tested that by compiling 5.3 with mysqlnd, and that succeeds!
--with-mysql=mysqlnd --with-mysql=/usr/include/mysql
I've also tried PHP 5.6 in case something broken was fixed, but that also fails with the cannot find header files error.
I'm at a loss of where to go from here.
-
Alen Milakovic over 9 yearsWhat is your OS/distribution? Why not use a backport, or build one yourself?
-
wl_dai over 9 yearsadded os version, oracle enterprise linux. not sure how a backport would be of any use, since i haven't identified the problem definitively yet.
-
Alen Milakovic over 9 yearswell backports just means using existing packaging. usually the packager has taken care of configuration problems, so you don't have to. This is a guarantee the packaging will build on a version it was not designed for, of course, but it often does, possibly with a little tweaking.
-
Alen Milakovic over 9 yearsTwo more specific comments. (a) configure isn't a black box - it is just a shell script. Check and see how it is testing for header files. You should be able to run the test separately yourself. (b) even if you don't want to use more recent packaging, you can check and see what configure arguments it is using.
-
wl_dai over 9 yearsoddly, the first 256 lines of the 5.3 configure are empty! it actually makes it look like it's a black box when you're right, it's not.
-
-
wl_dai over 9 yearsthanks much to faheem for helping me reach this solution.