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
是必须在构建时启用的核心扩展(如 SPL
和 PCRE
)。
对于那些试图解决丢失的 bcmath
扩展(例如那些 building/installing PHP 自己或仍然遇到问题)的人,我已经更正并更新了下面的原始答案。它详细解释了如何解决丢失的 PHP 扩展。
原始答案(更正)
该错误消息表明 PHP 未使用 bcmath
支持构建 或 无法找到已安装的扩展。 PHP 扩展要么直接内置到 PHP 中,要么在 运行 时从外部动态库文件加载。
由于PHP显然没有内置扩展,所以找不到提供bcmath
的外部库文件。 POSIX 平台上的此文件将在 Windows 上称为 bcmath.so
和 php_bcmath.dll
。
扩展文件安装在 php.ini
中 extension_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
目录下是否存在 bcmath
的 ini
文件。这些小的 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 的根目录中
- sudo add-apt-repository ppa:ondrej/php
- sudo apt 更新
- sudo apt 安装 php7.2-bcmath
- 服务 apache2 重启
- 然后打开php.ini并搜索bcmath
- 如果 bcmath scale 为 0,将其更改为 2
- 重启php
- 重新启动 Apache
- 硬重新加载网站
- 安装所需的模块
与任何版本的 PHP 类似,您只需要在第三条命令中更改 PHP 版本。
我正在尝试在 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
是必须在构建时启用的核心扩展(如 SPL
和 PCRE
)。
对于那些试图解决丢失的 bcmath
扩展(例如那些 building/installing PHP 自己或仍然遇到问题)的人,我已经更正并更新了下面的原始答案。它详细解释了如何解决丢失的 PHP 扩展。
原始答案(更正)
该错误消息表明 PHP 未使用 bcmath
支持构建 或 无法找到已安装的扩展。 PHP 扩展要么直接内置到 PHP 中,要么在 运行 时从外部动态库文件加载。
由于PHP显然没有内置扩展,所以找不到提供bcmath
的外部库文件。 POSIX 平台上的此文件将在 Windows 上称为 bcmath.so
和 php_bcmath.dll
。
扩展文件安装在 php.ini
中 extension_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
目录下是否存在 bcmath
的 ini
文件。这些小的 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 的根目录中
- sudo add-apt-repository ppa:ondrej/php
- sudo apt 更新
- sudo apt 安装 php7.2-bcmath
- 服务 apache2 重启
- 然后打开php.ini并搜索bcmath
- 如果 bcmath scale 为 0,将其更改为 2
- 重启php
- 重新启动 Apache
- 硬重新加载网站
- 安装所需的模块
与任何版本的 PHP 类似,您只需要在第三条命令中更改 PHP 版本。