【发布时间】:2017-10-01 02:30:36
【问题描述】:
我正在尝试使用 https://github.com/google/protobuf/tree/master/php 了解 PHP 中的 Protobuf。目前我陷入了一个错误。
我安装protobuf的步骤:
-
通过pecl使用命令安装protobuf:
sudo pecl install protobuf-3.2.0a1 -
如下设置composer.json,然后运行
sudo composer install{ "require": { "google/protobuf": "^3.2" } }
下面是我的代码:
-
原型文件:
syntax = "proto3"; message APIReq { string functionName = 1; string name = 2; int32 time = 3; string type = 4; } -
从 .proto 文件生成 PHP 类的命令:
protoc --php_out=/var/www/html/ MsgFormat.proto
protoc 命令产生两个文件,APIReq.php 和 GPBMetadata/MsgFormat.php
在那之后,我在生成的 PHP 文件中添加了 require_once __DIR__ . '/vendor/autoload.php'; 和 require_once __DIR__ . '/GPBMetadata/MsgFormat.php';,因为当我运行 php APIReq.php 时,它想出了
PHP Fatal error: Class 'Google\Protobuf\Internal\Message' not found in /var/www/html/testing/APIReq.php on line 13
添加这些行后,错误消失了,所以我认为这两行都解决了问题
-
我的 PHP 文件(以下示例来自 https://developers.google.com/protocol-buffers/docs/reference/php-generated,消息部分):
<?php require __DIR__ . '/vendor/autoload.php'; include_once('APIReq.php'); $param = new APIReq(); $param2 = new APIReq(); $param->setFunctionname('functionname'); $param->setName('name'); $param->setTime(123456); $param->setType('type'); $dt = $param->encode(); $param2->decode($dt); ?>
当我运行 PHP 代码时,它返回错误消息:
PHP Fatal error: Call to undefined method APIReq::encode()
我该如何解决这个问题?
编辑:也使用 protobuf 3.3.0 进行了尝试,结果相同。
【问题讨论】:
标签: php protocol-buffers