Drupal 8 - 商务模块 - BC 数学 PHP 未找到扩展

Drupal 8 - Commerce Module - BC math PHP extension not found

我正在尝试在 Drupal 8 中安装商务模块,但出现错误 'BC math PHP extension not found'。

我搜索了这个问题并尝试了不同的方法,例如通过添加 'bcmath.scale=2' 来编辑 PHP.ini,但是我仍然收到错误消息。

如有任何帮助,我们将不胜感激。

2020 年更新

如果您使用的发行版为 PHP 提供了 bcmath 包,请参阅@GiorgosK 的关于通过包管理器安装 bcmath 的回答。我会在评论中要求 OP 更新推荐的答案,因为该解决方案可能是大多数人需要的。

三年前我回答这个问题时,建议你必须重建PHP才能得到bcmath。那是不正确的。我使用的是 Debian/Ubuntu 的旧发行版,它提供 bcmath 作为核心 php 包中的静态链接扩展。我当时(错误地)确定 bcmath 是必须在构建时启用的核心扩展(如 SPLPCRE)。

对于那些试图解决丢失的 bcmath 扩展(例如那些 building/installing PHP 自己或仍然遇到问题)的人,我已经更正并更新了下面的原始答案。它详细解释了如何解决丢失的 PHP 扩展。

原始答案(更正)

该错误消息表明 PHP 未使用 bcmath 支持构建 无法找到已安装的扩展。 PHP 扩展要么直接内置到 PHP 中,要么在 运行 时从外部动态库文件加载。

由于PHP显然没有内置扩展,所以找不到提供bcmath的外部库文件。 POSIX 平台上的此文件将在 Windows 上称为 bcmath.sophp_bcmath.dll

扩展文件安装在 php.iniextension_dir 属性 指示的目录下。要确定此 属性、运行 的值,请使用以下命令:

php -r 'echo ini_get("extension_dir").PHP_EOL;'

此 属性 的默认值是在构建 PHP 时配置的,并且可能因分发而异。

一旦您确认扩展文件已安装在此位置,您就可以检查是否在 php.ini 中启用了扩展。您应该看到启用扩展的行,如下所示:

# POSIX platforms
extension=bcmath.so

# Windows
extension=php_bcmath.dll

对于像 Ubuntu/Debian 这样通过包管理器安装扩展的 Linux 发行版,格式有些不同,因为 Debian 使用分布式配置。通常,包管理器会正确安装所有内容,但您可以检查相应的 conf.d 目录下是否存在 bcmathini 文件。这些小的 ini 文件是导入到较大的 php.ini 文件中的片段,它们通常与 /etc/phpX/mods-available 进行符号链接,允许模块最初为所有 PHP SAPI(例如 CLI)启用, CGI, Apache Mod PHP, 等等。确保存在您需要使用的 PHP SAPI 的符号链接。

为确保您的 PHP 正在加载扩展,运行 phpinfo(); 在测试页面中搜索 bcmath。您还可以使用 CLI 使用如下命令更轻松地执行此操作:

$ php -i | grep -i bcmath
# Success output: BCMath support => enabled

# (Another command that works well for checking extensions)
$ php -m | grep -i bcmath
# Success output: bcmath

为了使 CLI 显示准确的结果,它必须以相同的 php.ini 文件为目标。如果没有,则使用 -c 选项临时将 CLI 指向正确的 php.ini(即您的 Drupal 站点正在使用的那个)。

只需为您的 php 版本安装 bcmath 插件,无需(重新)构建 php,如接受的答案

中所述
# get php version
php -v

# install bcmath based on your version lets assume php 7.1
# for ubuntu
sudo apt install php7.1-bcmath
# for centos 
yum install bcmath

# restart apache 
sudo systemctl restart apache2

使用composer安装commerce或commerce kickstart时出现以上问题

为 PHP 7.2

添加 BC MATH 扩展

如果您收到此 (https://prnt.sc/sehmd5) 错误,请使用 vagrant ssh 运行 下面的命令

运行 这些命令在 vagrant ssh 的根目录中

  1. sudo add-apt-repository ppa:ondrej/php
  2. sudo apt 更新
  3. sudo apt 安装 php7.2-bcmath
  4. 服务 apache2 重启
  5. 然后打开php.ini并搜索bcmath
  6. 如果 bcmath scale 为 0,将其更改为 2
  7. 重启php
  8. 重新启动 Apache
  9. 硬重新加载网站
  10. 安装所需的模块

与任何版本的 PHP 类似,您只需要在第三条命令中更改 PHP 版本。