无法弄清楚为什么我会收到 App Engine 弹性"Uncaught Error: Call to undefined function GoogleProtobufInternalbc



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

"PHP 消息:PHP 致命错误:未

捕获错误:调用未定义 函数 Google\Protobuf\Internal\bccomp(( in/app/web/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php:941">

一旦我通过在我的作曲家.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 支持 =>enabled bcmath.scale => 0 => 0

bccomp(( 的测试

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

我得到"-1"应该是。看起来该功能有效。

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

extension=bcmath.so

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

gcloud app deploy

我仍然收到致命错误。

经过5天的断头,找到了解决方案。BCMath似乎安装在PHP版本中>= 7,但未在Google App Engine上启用。为了启用它,我做了以下工作:

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

然后在 composer.json 中需要它

{
"require": {
"ext-bcmath": "*"  
}
}

最后部署项目

gcloud app deploy

仅此而已!

如果您从 docker 环境收到此错误,请尝试将以下内容添加到您的 Dockerfile 中(它为我解决了这个问题(。

RUN docker-php-ext-install bcmath

更多详细信息:https://forums.docker.com/t/php-bcmath-extension-don't-get-install-in-dockerfile/99773

相关内容

最新更新