我怎么能强制PHP使用的iconv的libiconv的版本,而不是安装CentOS的glibc的版本? [英] How can I force PHP to use the libiconv version of iconv instead of the CentOS-installed glibc version?
问题描述
在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:
- 下载PHP-5.3.3 源$ C $ C 包
- 解压,并进入
的php-5.3.3 / ext /中的iconv
子目录 - 执行
运行phpize
命令(如果您有没有这样的命令,然后安装PHP-DEVEL
封装) -
(*)编辑配置文件(
VIM配置
):添加iconv_impl_name =
在4664线(系统配置的确切行号可能会有所不同):
- download php-5.3.3 source code package
- extract it and go into
php-5.3.3/ext/iconv
subdirectory - execute
phpize
command (if you have no such command then installphp-devel
package) (*) edit configure file (
vim configure
): addiconv_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屋!