无法弄清楚为什么我收到 App Engine flex“未捕获错误:调用未定义函数 Google\Protobuf\Internal\bccomp()”

2023-12-28

我正在尝试在 App Engine flex 环境中实现 Google 的文本转语音 API,但出现此错误:

“PHP 消息:PHP 致命错误:未捕获错误:调用未定义 函数 Google\Protobuf\Internal\bccomp() 中 /app/web/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php:941"

一旦我通过在我的composer.json中要求BCmath()解决了问题

{  
    "require": {
        "ext-bcmath": "*",
        "google/cloud-text-to-speech": "^1.0",
        "google/gax": "^1.3",
         "grpc/grpc": "^1.4",
         "google/auth": "^1.8",
         "phpseclib/phpseclib": "^2.0",
         "google/protobuf": "^3.11"        
    }
}

然后重新安装 /vendor 后我无法摆脱错误消息。我尝试通过运行来安装 BCmath 扩展

sudo apt install php7.2-bcmath

但它说扩展已经安装。 我也运行这个 php-i | grep -i bcmath 并收到此消息

/etc/php/7.2/cli/conf.d/20-bcmath.ini,bcmath BCMath 支持 => 启用 bcmath.scale => 0 => 0

bccomp() 的测试

php -r "echo bccomp('1', '2');"

我按预期得到“-1”。看起来该功能有效。

我什至尝试在 php.ini 中启用 BCmath 扩展

extension=bcmath.so

我将 .ini 文件放在与 /vendor 和 index.php 相同的目录中。尽管如此,在部署应用程序后

gcloud app deploy

我仍然收到致命错误。


经过5天的破解,找到了解决方案。看来 BCMath 已安装在 PHP 版本 >= 7 中,但未在 Google App Engine 上启用。为了启用它,我执行了以下操作:

  1. 我创建了 php.ini 文件并将其放置在与 app.yaml 文件相同的目录中,该目录可能与您应用程序的根目录不同 (例如index.php)。
  2. 在空的新创建的 php.ini 中添加了一行:
extension=bcmath

然后在composer.json中require它

{
    "require": {

        "ext-bcmath": "*"  
    }
}

最后部署项目

 gcloud app deploy

就这样!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法弄清楚为什么我收到 App Engine flex“未捕获错误:调用未定义函数 Google\Protobuf\Internal\bccomp()” 的相关文章

随机推荐