在 Symfony 4.1 中使用 grpc,“找不到类 'Grpc\ChannelCredentials'。”

Zea*_*ser 6 php symfony grpc

根据 php 的 grpc 文档“ https://grpc.io/docs/quickstart/php.html ”将所有内容设置为使用 grpc 后,我尝试从编译一些 proto 文件中获得的类构建一个客户端对象使用 proto 编译器。

$rezept_nameservice_client = new Rezept_NameserviceClient('localhost:8082',
        [ 'credentials' => Grpc\ChannelCredentials::createInsecure()]);
Run Code Online (Sandbox Code Playgroud)

当我尝试运行我的代码时,出现以下异常:

尝试从命名空间“App\Controller\Grpc”加载类“ChannelCredentials”。您是否忘记了另一个命名空间的“use”语句?

工作环境:

  • Ubuntu 18.04
  • 风暴
  • Symfony 4.1
  • nginx 1.14.0
  • grpc v1.15.0
  • protobuf v3.6.1

我已经尝试了不同的方法来解决我在这里发现的问题:

这个问题最接近我遇到的问题

Jon*_*oso 0

php安装官方文档

您需要在 php.ini 中安装grpc.so和扩展。protobuf.so我的问题是我安装在fpmphp.ini 中,但忘记了cliphp.ini,这就是我遇到问题的原因。

这个特定的类 ( Grpc\ChannelCredentials) 在任何 PHP 文件中都不存在。它来自 C 扩展。要安装这些扩展,请运行:

sudo pecl install grpc
sudo pecl install protobuf
Run Code Online (Sandbox Code Playgroud)

并将其添加到您的 php.ini

extension=grpc.so
extension=protobuf.so
Run Code Online (Sandbox Code Playgroud)

您可以通过执行以下操作找到 php.ini 位置:

php -i | grep php.ini
Run Code Online (Sandbox Code Playgroud)

请注意,如果您正在使用php-fpm

使用php -i | grep php.ini将显示php.ini命令行php命令的 。提供页面服务的“php”php.ini通常在靠近 cli 的地方有自己的。例如:

/etc/php/7.2/cli/php.ini
/etc/php/7.2/fpm/php.ini
Run Code Online (Sandbox Code Playgroud)