【问题标题】:Drupal 8 - Commerce Module - BC math PHP extension not foundDrupal 8 - 商务模块 - BC 数学 PHP 扩展未找到
【发布时间】:2017-11-25 15:52:47
【问题描述】:

我正在尝试在 Drupal 8 中安装 commerce 模块,但是我收到错误消息“找不到 BC 数学 PHP 扩展”。

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

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 我建议将接受的答案更改为 @GiorgosK's
  • 我支持这个建议。 (我是搞砸了接受的答案的人!)@GiorgosK 的答案可能适用于大多数遇到此问题的人。
  • Commerce 是最新版本显然很重要。未检测到 BCMath,我无法安装 Drupal Commerce,直到我完全按照 documentation 中的指示进行更新

标签: drupal-8 php-extension drupal-commerce commerce bcmath


【解决方案1】:

只需为您的 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 时出现上述问题

【讨论】:

  • 这是一个比公认答案更快/更简单的解决方案。谢谢@GiorgosK。仅供参考,就我而言,我只需要去sudo apt install php7.1-bcmath
  • 尽管添加了模块并重新启动了 apache,甚至终止了正在运行的 php-cgi 作业,但 install.php 仍然抱怨它不存在。我检查了 php -i 和 phpinfo() 并且它是活动的。
【解决方案2】:

2020 年更新

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

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

对于那些试图解决缺少的bcmath 扩展程序的人(例如那些自己构建/安装 PHP 或仍然遇到问题的人),我已在下面更正并更新了我的原始答案。它详细解释了如何解决缺少的 PHP 扩展。

原始答案(已更正)

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

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

扩展文件安装在由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 目录下是否存在bcmathini 文件。这些小的ini 文件被sn-ps 导入到更大的php.ini 文件中,它们通常被符号链接到/etc/phpX/mods-available,允许最初为所有PHP SAPI 启用模块,例如CLI、CGI、Apache Mod PHP、ETC .确保您需要使用的 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 站点正在使用的那个)。

【讨论】:

  • 非常感谢您的回复。目前我正在使用使用此操作系统 FreeBSD 9.1-RELEASE-p24 amd64 的出租服务器。我找不到更新或重新安装 PHP 的方法。我还尝试使用 sudo 和 pkg 命令添加到 PHP,但我遇到了一个问题,我认为这可能与没有服务器许可有关。你知道解决这个问题的方法吗?
  • 如果您没有权限,您将很难更新 PHP 安装。由于 Web 服务器可能配置为使用系统 PHP 安装,因此很难提供替代方案,除非您可以修改 Web 服务器配置。我会联系托管公司并要求他们安装所需的 PHP 版本和任何软件包。顺便说一句,您的问题可能会在 serverfault.com 上得到更好的回答,该网站更适合此类问题。本站主要针对计算机编程问题。
  • 非常感谢您提供的所有信息。事实证明,我无权更改我正在使用的租赁服务器上的根目录文件。所以我要尝试不同的服务器!如果我遇到任何问题,我将非常感谢您的帮助!
  • 我拥有所有权限。我可以在 php -i 和 phpinfo() 中看到 BC 数学扩展,但 install.php 仍然没有看到它。这里有缓存吗?
  • @ñull 确保 Web 服务器 PHP 的目标配置与 CLI PHP 相同。有关更多信息,请参阅我的更新答案。
【解决方案3】:

为 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 install php7.2-bcmath
  4. 服务 apache2 重启
  5. 然后打开php.ini,搜索bcmath
  6. 如果 bcmath scale 为 0,则改为 2
  7. 重启php
  8. 重启 Apache
  9. 硬重新加载网站
  10. 安装所需的模块

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2018-03-23
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多