【问题标题】:PHP protobuf error - Undefined method for encode/decodePHP protobuf 错误 - 未定义的编码/解码方法
【发布时间】: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


    【解决方案1】:

    编码和解码在我追踪的代码库中不存在。

    此更改是在 3.3.0 中引入的

    //to encode message 
    $data = $param->serializeToString();
    
    //to decode message
    $param2 = new APIReq();
    $param2->mergeFromString($data);
    

    【讨论】:

    • 2 年后,仍然没有 PHP 文档。谢谢你!
    猜你喜欢
    • 2011-07-13
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多