在osx上使用MySQL native driver for PHP
昨天处理摄影频道的产品样片时,发现自己osx上的php5没有启用exif,哎,以前的linux的脚本都有的,不知道怎么回事,port到mac时遗漏了。原以为没什么问题,结果问题来了。编译到mysql ext的时候总是报错,大概意思是说mysqlclient(libmysql)的zlib和php编译的动态库版本不一致。奇怪啊,以前好好的。想了半天,原来之前用的是mysql4.1后来升级到mysql5,好像没有重新编译php。怎么解决呢?我以为是macports的问题,就重新把fink的zlib使用,还是无用。调整了可能的编译参数,没用。这下郁闷大了。搜了下,有人说mysql5.0.27的osx版本无法编译php,据说解决了,但是看我的情况还是不行。我也不能降级到mysql4,要么自己重新编译mysql5,要么想别的方法。我受不了那漫长的编译时间,突然想起上次在mysql.com上看到的mysql native driver for php,既然是native,那么就不依赖mysql的库,应该就不会有问题了。
看了看mysqlnd,发现好处是不少的,已经checkin到php6中了,而且php-5.3的特性投票中,它是排在第三,据一些用户的反馈,mysqlnd的速度要比libmysql的速度提升最多2倍,最令人兴奋的是persisten connection能用了,不知道效果如何,但如果真能用我也许可以不使用我的jdba中间件,至少有这可能性吧;此外内存的使用也少了很多。我的要求不高了,能马上用就好了。
编译的还是比较简单的,毕竟咱也轻车熟路这么多回了。
1.首先,要使用php 5.2.5的开发版,从snaps.php.net下,昨天的更新。
2.checkout 最新的mysqlnd的svn代码:
svn co http://svn.mysql.com/svnpublic/php-mysqlnd
3.将mysqlnd的代码合并到php source:
cd /usr/local/src/php-5.2.dev
rm -rf ext/mysql ext/mysqli
cp -R ../php-mysqlnd/trunk/php5/ext/mysql ext/mysql
cp -R ../php-mysqlnd/trunk/php5/ext/mysqli ext/mysqli
cp -R ../php-mysqlnd/trunk/mysqlnd ext/mysqlnd
rm ext/mysql/tests
rm ext/mysqli/tests
cp -R ../php-mysqlnd/trunk/tests/ext/mysql ext/mysql/tests
cp -R ../php-mysqlnd/trunk/tests/ext/mysqli ext/mysqli/tests
4../buildconf –force
5.修改compile.sh,增加mysqlnd的选项:
PATH=/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/mysql/bin:/opt/Ice/bin ./configure \
--prefix=/usr/local/php5 \
--enable-force-cgi-redirect \
--enable-fastcgi \
--enable-ftp \
--enable-calendar \
--enable-gd-native-ttf \
--enable-mbstring \
--enable-mbstr-enc-trans \
--enable-mbregex \
--enable-shmod \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-inline-optimization \
--disable-ipv6 \
--disable-debug \
--with-config-file-path=/usr/local/php5/etc \
--with-config-file-scan-dir=/usr/local/php5/etc/php.d \
--with-zlib \
--with-curl \
--with-dom \
--with-dom-xslt \
--with-gd=/opt/local \
--enable-gd-native-ttf \
--with-jpeg-dir=/opt/local \
--with-png-dir=/opt/local \
--with-gettext \
--with-openssl=shared \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-freetype-dir=/usr/X11R6 \
--with-iconv \
--with-gettext=/opt/local \
--with-xml \
--with-kerberos \
--with-pcre-regex \
--enable-exif \
--with-mime-magic=/usr/share/file/magic.mime
make clean
make
4.make test
5.make install
6./usr/local/sbin/spawn-php5.sh restart
正如mysqlnd所描述的,它不是一个新的扩展,而是内部的,替换libmysql的,因此对于使用mysql php代码来说没有什么改变,
但是如果使用mysqli,则可以使用一些增强的函数,获得更好的特性,比如mysqli_fetch_all。我准备马上更新doggy,
增加一个mysqlnd_dba,这样可以充分享用这些新的特性。
Comments
One Response to “在osx上使用MySQL native driver for PHP”
Leave a Reply
buildconf跟configure是過了
但是只要有加–with-gd
make就一定有問題…