буферы протокола — PHP protobuf error — неопределенный метод для кодирования / декодирования

Я пытаюсь узнать о Protobuf в PHP с помощью https://github.com/google/protobuf/tree/master/php . В настоящее время я застрял в ошибке.

Мои шаги по установке protobuf:

  • Установите protobuf через pecl с помощью команды:

    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;
    }
    
  • Команда для генерации PHP класса из .proto файла:

    protoc --php_out=/var/www/html/ MsgFormat.proto
    

Команда protoc привела к двум файлам, APIReq.php и GPBMetadata / MsgFormat.php

После этого я добавил require_once __DIR__ . '/vendor/autoload.php'; а также require_once __DIR__ . '/GPBMetadata/MsgFormat.php'; в сгенерированном файле 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, с тем же результатом.

2

Решение

шифровать & Декодирование не существует в кодовой базе, как я проследил.

Это изменение было введено в 3.3.0

//to encode message
$data = $param->serializeToString();

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]