我正在处理的代码可以在Windows XP和Mac OS X上完美运行。在CentOS(以及Fedora和Ubuntu)上进行测试时,它无法正常工作。搜索网络后得出的结论是,导致问题的是glibciconv版本。因此,现在我需要libiconviconv版本才能使Zend Lucene正常工作。

我已经下载了libiconv,并使用--prefix=/usr/localmakemake install对其进行了配置,没有任何错误。似乎已成功安装,因为执行/usr/local/bin/iconv --version表示该版本为libiconv。尽管简单的iconv --version仍然提供glibc版本。

然后,我使用--with-iconv=/usr/local从源代码重新编译了PHP。但是phpinfo()仍然显示正在使用的iconvglibc版本。我也已经尝试过使用--with-iconv-dir/usr/local/bin/php进行其他几种编译。

当然,我在重新编译PHP之后重新启动了Web服务器。

我的/etc/httpd/conf/httpd.conf中有以下一行:

LoadModule /usr/lib/httpd/modules/libphp5.so

libphp5.so实际上在/usr/lib/httpd/modules中。
phpinfo()显示PHP 5.3.3。我也为了确保确实删除了预装的PHP 5.1。*。但是iconv仍在使用glibc版本。
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 source code软件包
  • 将其解压缩并进入php-5.3.3/ext/iconv子目录
  • 执行phpize命令(如果没有此命令,则安装php-devel软件包)
  • (*)编辑配置文件(vim configure):在4664行添加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
    
  • make
  • sudo make install

  • 现在我运行php -i|grep "iconv impl"并得到:
    iconv implementation => libiconv
    

    *此技巧将强制配置为选择GNU libiconv而不是glibc的iconv。默认情况下,它首先检查glibc的iconv,而根本不检查GNU libiconv。

    10-01 15:28
    查看更多