Php Can';我不明白为什么我会得到AppEngine flex“;未捕获错误:调用未定义的函数Google\Protobuf\Internal\bccomp();

Php Can';我不明白为什么我会得到AppEngine flex“;未捕获错误:调用未定义的函数Google\Protobuf\Internal\bccomp();,php,google-app-engine,composer-php,google-text-to-speech,bcmath,Php,Google App Engine,Composer Php,Google Text To Speech,Bcmath,我试图在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": {

我试图在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"        
    }
}
{
    "require": {

        "ext-bcmath": "*"  
    }
}
然后在重新安装/vendor后,我无法清除错误消息。我试图通过运行

sudo apt install php7.2-bcmath
但是它说扩展已经安装。 我也经营这个 php-i | grep-i bcmath 并得到这个消息

/etc/php/7.2/cli/conf.d/20-bcmath.ini,bcmath-bcmath-support=> 已启用bcmath.scale=>0=>0

bccomp()的测试

我得到了应该的“-1”。看起来这个函数可以工作

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

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

gcloud app deploy

我仍然得到致命错误。

在打破头部5天后,找到了解决方案。BCMath似乎安装在PHP版本>=7中,但未在Google App Engine上启用。为了启用它,我执行了以下操作:

  • 我已经创建了php.ini文件,并将其放置在与app.yaml文件相同的目录中,这可能与应用程序的根目录不同 (例如index.php)
  • 在新创建的php.ini中,添加了一行:
  • 然后在composer.json中需要它

    {  
        "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"        
        }
    }
    
    {
        "require": {
    
            "ext-bcmath": "*"  
        }
    }
    
    最后部署项目

     gcloud app deploy
    

    就这些

    您确定FPM中已启用bcmath吗?检查fpm的php。ini@Mihail0v您能详细说明一下如何检查FPM并在Google Cloud Shell中启用bcmath吗?/etc/php/7.2/FPM/php.ini默认情况下应该在这里。检查文件是否包含“extensions=bcmath.so”节。@Mihail0v没有像/fpm这样的目录。当我在/etc/php/7.2/目录中时,它只显示“cgi”“cli”和“mods available”子目录。在可用的/mods中有一个bcmath.ini文件,其内容是“PHPBcmath模块的配置;优先级=20扩展名=bcmath.so”。php.ini位于/cli目录中,我没有找到bcmath extesion。那么,如何将其添加到php.ini?@TechToSpeech抱歉,我以为您使用的是php fpm。您可以传递phpinfo();出口在index.php的开头,查看可用的扩展和php.ini路径。它是否显示bcmath已启用?谢谢。这一问题也曾在本报告中讨论过。