当前位置: 首页 > 面试题库 >

如何强制PHP使用iconv的libiconv版本而不是CentOS安装的glibc版本?

经炜
2023-03-14
问题内容

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

我已经下载libiconv的,并配置它--prefix=/usr/localmake,然后make install没有任何错误。似乎已成功安装,因为执行/usr/local/bin/iconv --version说版本是libiconv。虽然简单iconv --version仍然给出了glibc版本。

然后,我使用来从源代码重新编译PHP --with- iconv=/usr/local。但是,仍然phpinfo()显示iconv所使用的是glibc版本。我已经使用--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。按着这些次序:

  1. 下载php-5.3.3 源码包
  2. 解压缩并进入php-5.3.3/ext/iconv子目录
  3. 执行phpize命令(如果没有这样的命令,请安装php-devel软件包)
  4. (*)编辑配置文件(vim configure):iconv_impl_name=""在4664行添加(系统配置上的确切行号可能不同):
        ...
    iconv_impl_name=""
        if test -z "$iconv_impl_name"; then
          { $as_echo "$as_me:${as_lineno-$LINENO}: checking if using GNU libiconv" >&5<
    ...
  1. ./configure --with-iconv=/usr/local|grep iconv
checking if using GNU libiconv... yes
  1. make

  2. sudo make install

现在我跑步php -i|grep "iconv impl"并得到:

    iconv implementation => libiconv

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



 类似资料:
  • 问题内容: 我想使用MAMP的PHP版本,而不是Mac上安装的默认版本。我尝试使用 但出现“文件存在”错误。解决此问题的最佳方法是什么,因此我可以只键入php而不是完整路径? 问题答案: 我不建议您尝试修改命令行上调用的PHP的默认版本。如果您决定升级操作系统,这样做可能会破坏系统的其他部分,并在将来给您带来问题。 有一种替代方案可以满足您的需求。您可以为MAMP的php 5.3副本创建别名。就我

  • 将以上内容更改为 解决了问题。但是,与其将Scala-XML2.11版本1.0.5排除在scalatest之外,我想强制scala编译器使用Scala-XML2.11版本1.0.5而不是版本1.0.4。(我在https://mvnrepository.com上研究了这些版本。)因此,我尝试将替换为 然而,这导致 [警告]*org.scala-lang:scala-library:(2.11.8,2

  • 问题内容: 我的雇主有一个专用模块1,我们用于内部单元/系统测试;但是,该模块的作者不再在这里工作,并且要求我使用它来测试某些设备。 问题在于,该版本需要(v8.2.0)的较旧版本,并且需要导入33个不同的文件中。我试过在v11.0.0下运行单元测试,甚至看不到TCP SYN数据包2。不幸的是,我已经在我的实验室linux服务器上安装了Twisted v11.0.0 ,并且我有依赖于它的代码。 我

  • 问题内容: 我正在尝试在CentOS 7 64位系统上安装现代docker.io版本1.5+。 yum服务器随附的默认docker.io是1.3.2,并且此版本对于我需要的某些docker.io功能来说太旧了,例如 系统细节: 系统: 关于如何安装现代docker.io 1.5+的任何想法? 问题答案: 这是我所做的: 使用此命令将仓库添加到yum 并具有以下内容: 开始使用yum 搜索 请注意,

  • 问题内容: 当我在Ubuntu Lucid 10.04 PC上编译东西时,它会与glibc链接。Lucid使用glibc 2.11。当我在具有旧版glibc的另一台PC上运行此二进制文件时,该命令失败,提示没有glibc 2.11 … 据我所知,glibc使用符号版本控制。我可以强制gcc链接到特定的符号版本吗? 在我的具体用法中,我尝试为ARM编译gcc跨工具链。 问题答案: 您是正确的,因为g

  • 当我运行xampp php版本7时都很好,但当我运行xampp php版本8但我当前的项目不工作时,这是我的laravel 9 xampp php版本8当前项目 还有一个问题,当我运行新项目并安装npm安装时 和当我运行php工匠迁移和服务后,然后登录网址