我怎么能强制PHP使用的iconv的libiconv的版本,而不是安装CentOS的glibc的版本? [英] How can I force PHP to use the libiconv version of iconv instead of the CentOS-installed glibc version?

查看:1664
本文介绍了我怎么能强制PHP使用的iconv的libiconv的版本,而不是安装CentOS的glibc的版本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在code我工作的完美运行在Windows XP和Mac OS X上在CentOS上测试它(和Fedora和Ubuntu),它不能正常工作。搜索篮网带领我到它的的iconv 这是造成问题的的glibc 版本的结论。所以现在我需要的iconv libiconv的版本的Zend Lucene的正常工作。

The code I'm working on runs perfectly on Windows XP and on Mac OS X. When testing it on CentOS (and on Fedora and Ubuntu), it's not working properly. Searching the nets led me to the conclusion that it's the glibc version of the iconv that's causing the problem. So now I need the libiconv version of iconv for Zend Lucene to work properly.

我已经下载libiconv的和配置它 - preFIX =的/ usr /本地制作 ,那么使安装没有任何错误。它似乎已成功安装,因为执行的/ usr / local / bin目录/ --version的iconv 说的版本是 libiconv的。虽然一个简单的的iconv --version 还给出了的glibc 版本。

I already downloaded libiconv and configured it with --prefix=/usr/local, make, then make install without any errors. It seems that it was successfully installed because executing /usr/local/bin/iconv --version says the version is the libiconv. Although a simple iconv --version still gives the glibc version.

然后我使用重新编译PHP从源头 - 与-的iconv =的/ usr /本地。但尽管如此,在的phpinfo()正显示出的iconv 正在使用的是的glibc 版本。我也已经尝试使用其他几个编译 - 与-的iconv-DIR 或使用的/ usr / local / bin目录/ PHP

Then I recompiled PHP from source using --with-iconv=/usr/local. But still, the phpinfo() is showing the iconv being used is the glibc version. I've also already tried several other compiles using --with-iconv-dir or using /usr/local/bin/php.

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

Of course, I restarted the web server after recompiling PHP.

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

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

libphp5.so 实际上是在 / usr / lib目录/的httpd /模块

的phpinfo()显示PHP 5.3.3。我也百胜删除了pre-安装了PHP 5.1。*,以确保公正。但是的iconv依然采用glibc的版本。

phpinfo() shows PHP 5.3.3. I also yum removed the pre-installed PHP 5.1.* just to make sure. But the iconv is still using the glibc version.

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)

这是从跨岗位:<一href=\"http://nullpointer.ph/questions/2922/how-can-i-force-php-to-use-the-libiconv-version-of-iconv-instead-of-the-centos-installed-glibc-version\">NullPointer.ph

推荐答案

我只是通过PHP的iconv扩展的手动重新编译改变了我的php-5.3.3从glibc的公司的iconv到GNU libiconv的。请按照下列步骤:

I just have changed my php-5.3.3 from glibc's iconv to GNU libiconv through the manual recompiling of the php iconv extension. Follow these steps:


  1. 下载PHP-5.3.3 源$ C ​​$ C

  2. 解压,并进入的php-5.3.3 / ext /中的iconv 子目录

  3. 执行运行phpize 命令(如果您有没有这样的命令,然后安装 PHP-DEVEL 封装)

  4. (*)编辑配置文件( VIM配置):添加 iconv_impl_name =在4664线(系统配置的确切行号可能会有所不同):

  1. download php-5.3.3 source code package
  2. extract it and go into php-5.3.3/ext/iconv subdirectory
  3. execute phpize command (if you have no such command then install php-devel package)
  4. (*) edit configure file (vim configure): add iconv_impl_name="" at 4664 line (exact line number on your system configuration may be different):

...

  iconv_impl_name =

     如果测试-z$ iconv_impl_name然后

       {$ as_echo$ as_me:$ {$ as_lineno-} LINENO:检查是否使用GNU libiconv的>&安培; 5

   ...

./配置--with-的iconv =的/ usr /本地| grep的的iconv

检查是否使用GNU libiconv的......是的

checking if using GNU libiconv... yes

制作

现在我跑 PHP -i | grep的的iconv implement执行并得到了:

执行的iconv => libiconv的

iconv implementation => libiconv

*此招的力量配置选择GNU libiconv的,而不是glibc的的的iconv。默认情况下它会检查的glibc的在第一步的iconv,并在所有不检查GNU libiconv的。

* This trick forces configure to select the GNU libiconv instead of glibc's iconv. By default it checks for glibc's iconv at first step and does not check for GNU libiconv at all.

这篇关于我怎么能强制PHP使用的iconv的libiconv的版本,而不是安装CentOS的glibc的版本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆