【问题标题】:PHP intl extension doesn't workPHP intl 扩展不起作用
【发布时间】:2012-11-16 17:44:53
【问题描述】:

我已经在 Debian Squeeze 上通过 PECL 安装了 intl 扩展。但是当我将extension=intl.so 放入我的 php.ini 文件并重新启动 Apache 时,它​​会将 CP 加载到大约 99% 并且没有任何效果。使服务器再次工作的唯一方法是从 php.ini 文件中删除 extension=intl.so 行。为什么?

Apache 错误日志是:

[Wed Nov 28 23:09:59 2012] [notice] suEXEC 机制已启用(包装器: /usr/lib/apache2/suexec) PHP 警告:函数注册失败 - 重复名称 - 第 0 行未知中的 idn_to_ascii PHP 警告: 函数注册失败 - 重复名称 - idn_to_utf8 in Unknown 第 0 行 PHP 警告:idn:无法注册函数,无法注册 在第 0 行加载未知

【问题讨论】:

  • 您检查过 Apache 日志是否有错误?
  • 确保您没有意外加载 PECL 两次,可能会以不同的名称列出,还要检查以确保 PHP 没有使用它编译。一种简单的检查方法是禁用加载 intl.so,然后在 PHP 脚本中测试其中一个 intl 函数,如果它成功运行,那么您已经加载了它。

标签: php apache debian intl


【解决方案1】:

出于显而易见的原因,函数名称必须是唯一的。

(推荐)扩展 intl 提供函数 idn_to_asciiidn_to_utf8(以及其他有用的函数),以及 pecl 扩展 idn (source)

自 2009 年以来,idn 处于(早期)测试阶段,不再开发。

我该如何解决?

你要做的就是卸载你的idn扩展

apt-get remove php-pecl-idn

或(取决于它是如何安装的)

pecl uninstall idn

或者简单地在你的配置中注释扩展名

; extension=idn.so

然后重启你的 apache

【讨论】:

  • 谢谢!我已经评论了 extension=idn.so,现在它可以工作了。但是我没有找到完全删除扩展的方法。 apt-get remove 和 pecl uninstall 找不到那个包
  • 它可能会被编译到你的 php 二进制文件中。检查phpinfo() 输出头部的Configure Command 是否有--enable-intl,这将证明这个假设是正确的。在这种情况下,除非您重新编译您的 php 二进制文件或使用 apt-get 更新到较新的版本,否则您无法完全删除它
猜你喜欢
  • 2016-06-04
  • 2014-01-04
  • 2018-05-10
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 2012-01-22
  • 2015-02-19
  • 2015-03-04
相关资源
最近更新 更多