致命错误:找不到“NumberFormatter”类

89

我用这段代码已经很久了,从来没有出过问题,但突然之间就停止工作了。

我在互联网上阅读了有关此问题的资料,似乎需要安装PHP 5.3或更高版本以及安装PHP intl插件。 我已经都安装好了,但是每当我使用以下函数时仍然收到Fatal error: Class 'NumberFormatter' not found错误:

function format_item($value)
{
       $format = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
       return $format->formatCurrency($value, 'AUD');
}

此外,这是我php.ini文件中的一段代码,显示我已经安装了PHP intl插件:

[intl]
intl.default_locale = fr_FR
; This directive allows you to produce PHP errors when some error
; happens within intl functions. The value is the level of the error produced.
; Default is 0, which does not produce any errors.
intl.error_level = E_WARNING

我在我的php.ini中也有 extension=php_intl.dll,而且它也在我的目录中。
为什么会出现这个错误?

3
你在 php.ini 中取消了扩展的注释吗?在取消注释后,你是否重启了 Apache?我找到了这个链接,看看它是否能帮助你:https://dev59.com/fXM_5IYBdhLWcg3wQQ3w。 - Eric Martinez
是的,它没有注释。我会看一下那个链接。 - cannatown
创建 phpinfo.php 文件,内容为 <?php phpinfo(); ?>,然后浏览该页面。确认您的 PHP 版本和扩展确实已加载。 - Wade
货币代码应该用引号括起来。应该是'AUD'。请查看文档:http://php.net/manual/en/numberformatter.formatcurrency.php - Wade
@WadeShuler 这是我的文件中的内容,由于某种原因它们没有被粘贴在帖子中。我会编辑一下。 - cannatown
显示剩余5条评论
22个回答

76

你所需要的就是:

apt-get install php7.0-intl

不需要更改php.ini或进行其他任何操作。(在Ubuntu 16.04上测试过PHP 7)。

这里得票最高的答案要求您取消注释.dll,除非您正在使用Windows服务器,否则这永远不会解决任何问题!


是的,我几天前也遇到了这个问题,在其他地方看到了Mac上的brew install php7.0-intl,然后尝试了一下apt-get install php7.0-intl,结果就好了! - mascot6699
谢谢,我遇到了一个几乎类似的问题,但由于我使用的是php7.3,所以sudo apt-get install php7.3-intl对我有用。 - Swaleh Matongwa

67

您只需取消注释以下行,即可在php.ini中启用此扩展:

extension=ext/php_intl.dll

要了解更多详情,请访问启用intl扩展


1
如果 extension=ext/php_intl.dll 没有解决问题,请尝试 extension=php_intl.dll - the-breaker
6
extension=intl - Marleen
@Marleen 谢谢!(Win11 上的 Xampp) - Ionut B.
取消注释extension=php_intl.dll在php 5.6中对我有效。 - undefined

29

这对我有用(Ubuntu 18.10,PHP 7.2.15)

sudo apt-get install php-intl
service apache2 restart

1
我为我的7.4 PHP服务器修复了这个问题 sudo apt-get安装php7.4-intl - Ariful Islam

13

我正在使用PHP 5.5版本,在Ubuntu机器上遇到了相同的错误。 我安装了php5-Intl包并重新启动了我的apache服务器。 这样解决了问题。

对于PHP5

sudo apt-get install php5-intl

适用于 PHP7

sudo apt-get install php7.0-intl

如果是 Mac OS X 系统,使用以下命令安装 PHP5.6:

brew install php56-intl

针对不同的操作系统,请查看此页面:http://php.net/manual/en/intl.installation.php

要检查是否成功安装,请运行命令 php -m。这应该会在列表中显示intl软件包。

如果您在Mac OS X上使用XAMPP,则php-intl有时会创建不同的问题。您可以按照这里提到的调试步骤进行操作。

如果您遇到"Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20121212/intl.so'"错误,请按照这里提到的步骤进行操作。


1
谢谢。这给了我解决问题的线索。 - Ariful Islam

10
这意味着您的PHP的 intl 包未安装和/或未启用。 步骤1 确保您安装了 php7.2-intl(或检查它是否已安装)。在我的情况下,我使用的是 PHP 7.2,但版本可能会有所变化。
要安装,我使用了:
sudo apt install php7.2-intl

步骤2

成功安装后,打开 php.ini 文件并去掉注释,以启用该扩展:

extension=intl

步骤三

重新启动Apache

sudo service apache2 restart

我刚刚在XAMPP服务器中打开了php.ini文件并启用了extension=intl扩展,现在它运行得非常好,非常感谢。 - softya

9

我正在运行ubuntu-16.04,并且使用php7,我遇到了同样的问题,这是由于php_intl扩展引起的。

我解决的方法-

  • First check the extension is installed or not on your server, use below command to check it

    php -m | grep intl
    
  • If there's no results, you must need to install it

  • If not installed, let's install it

    sudo apt-get update
    sudo apt-get install php-intl
    
  • Finally you need to restart your web server after you install

简单PHP程序中出现了“Class 'NumberFormatter' not found”错误

https://www.howtoinstall.co/zh-Hans/ubuntu/xenial/php-intl


8

另外,如果有人使用 Laravel 中的 php artisan serve 命令并遇到此问题,则需要进行以下补充操作,确保已取消注释:

extension=intl

在php.ini中,不要忘记重新启动你的Laravel开发服务器。

1
这是我的问题,谢谢!我在新的WSL2设置中使用valet-linux,必须执行valet restart - Nate S

5

如果您使用的是xampp和php > 7.*,

请编辑以下这一行 ;extension=intl 改为 extension=intl,然后重新启动mysql服务即可。


5

3
(Ubuntu 20.04.3 LTS,PHP版本7.4.30)
sudo apt-get install php7.4-intl
sudo service nginx restart

非常感谢你,你救了我的一天。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接