我正在处理的代码可以在Windows XP和Mac OS X上完美运行。在CentOS(以及Fedora和Ubuntu)上进行测试时,它无法正常工作。搜索网使我得出结论,那就是引起问题glibc的iconv那一版本。因此,现在我需要Zend Lucene 的libiconv版本iconv才能正常工作。
glibc
iconv
libiconv
我已经下载libiconv的,并配置它--prefix=/usr/local,make,然后make install没有任何错误。似乎已成功安装,因为执行/usr/local/bin/iconv --version说版本是libiconv。虽然简单iconv --version仍然给出了glibc版本。
--prefix=/usr/local
make
make install
/usr/local/bin/iconv --version
iconv --version
然后,我使用来从源代码重新编译PHP --with- iconv=/usr/local。但是,仍然phpinfo()显示iconv所使用的是glibc版本。我已经使用--with-iconv- dir或使用尝试了其他几种编译/usr/local/bin/php。
--with- iconv=/usr/local
phpinfo()
--with-iconv- dir
/usr/local/bin/php
当然,我在重新编译PHP之后重新启动了Web服务器。
我的代码如下/etc/httpd/conf/httpd.conf:
/etc/httpd/conf/httpd.conf
LoadModule /usr/lib/httpd/modules/libphp5.so
并且libphp5.so实际上在/usr/lib/httpd/modules。
libphp5.so
/usr/lib/httpd/modules
phpinfo()显示PHP 5.3.3。我也为了确保确实删除了预装的PHP 5.1。*。但是iconv仍在使用glibc版本。
ldd /usr/lib/httpd/modules/libphp5.so 给
ldd /usr/lib/httpd/modules/libphp5.so
linux-gate.so.1 => (0x003b1000) /usr/local/lib/preloadable_libiconv.so (0x00110000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x001ed000) librt.so.1 => /lib/librt.so.1 (0x0021f000) libmysqlclient.so.15 => /usr/lib/mysql/libmysqlclient.so.15 (0x003b2000) libldap-2.3.so.0 => /usr/lib/libldap-2.3.so.0 (0x0026e000) liblber-2.3.so.0 => /usr/lib/liblber-2.3.so.0 (0x00370000) libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x00516000) libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x002a8000) libpng12.so.0 => /usr/lib/libpng12.so.0 (0x00228000) libz.so.1 => /usr/lib/libz.so.1 (0x00328000) libcurl.so.3 => /usr/lib/libcurl.so.3 (0x00f23000) libm.so.6 => /lib/libm.so.6 (0x0033b000) libdl.so.2 => /lib/libdl.so.2 (0x00364000) libnsl.so.1 => /lib/libnsl.so.1 (0x0037e000) libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00f5f000) libssl.so.6 => /lib/libssl.so.6 (0x0862c000) libcrypto.so.6 => /lib/libcrypto.so.6 (0x04145000) libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x08e2d000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x0611a000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x005f4000) libcom_err.so.2 => /lib/libcom_err.so.2 (0x0024e000) libidn.so.11 => /usr/lib/libidn.so.11 (0x071f5000) libc.so.6 => /lib/libc.so.6 (0x08aa6000) libpthread.so.0 => /lib/libpthread.so.0 (0x00397000) /lib/ld-linux.so.2 (0x00251000) libresolv.so.2 => /lib/libresolv.so.2 (0x0748a000) libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0x07ddf000) libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x062b7000) libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00369000) libselinux.so.1 => /lib/libselinux.so.1 (0x0913b000) libsepol.so.1 => /lib/libsepol.so.1 (0x07eb4000)
这是来自以下网站的跨站文章:NullPointer.ph
我只是通过手动重新编译php iconv扩展将php-5.3.3从glibc的iconv更改为GNU libiconv。按着这些次序:
php-5.3.3/ext/iconv
phpize
php-devel
vim configure
iconv_impl_name=""
... iconv_impl_name="" if test -z "$iconv_impl_name"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if using GNU libiconv" >&5< ...
./configure --with-iconv=/usr/local|grep iconv
checking if using GNU libiconv... yes
sudo make install
现在我跑步php -i|grep "iconv impl"并得到:
php -i|grep "iconv impl"
iconv implementation => libiconv
*此技巧将强制配置为选择GNU libiconv而不是glibc的iconv。默认情况下,它首先检查glibc的iconv,而根本不检查GNU libiconv。