ホームページ >バックエンド開発 >PHPの問題 >PHP で protobuf3 を読み書きする方法

PHP で protobuf3 を読み書きする方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-07-22 16:05:232693ブラウズ

protobuf (Google Protocol Buffers) は、Google が提供する効率的なプロトコル データ交換フォーマット ツール ライブラリです (Json と同様) が、Protobuf は Json と比較して変換効率が高く、時間効率とスペース効率はいずれも JSON の 3 ~ 5 倍です。

PHP で protobuf3 を読み書きする方法

proto3 では、protoc コマンドを直接使用して PHP コードを生成できます。生成された PHP コードは直接使用できず、Protobuf PHP ライブラリのサポートが必要です。

以下では、例を使用して、PHP で protobuf を使用する方法を示します。まず、proto ファイルを定義します:

syntax = "proto3";
package lm;

message helloworld
{
    int32 id = 1; // ID
    string str = 2; // str
    int32 opt = 3; // optional field
}

ここでは、proto2 とは異なる proto3 の構文が使用されていることに注意してください。必須およびオプションの制限はなくなり、すべてのフィールドがオプションになります。 proto3 と proto2 の違いは何ですか? この記事を参照してください。

次に、protoc を使用して PHP ファイルを生成します:

protoc --php_out=./ hello.proto

hello.pb.php ファイルが生成されることがわかります:

PHP コードを生成する

namespace Lm;

use Google\Protobuf\Internal\DescriptorPool;
use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\RepeatedField;
use Google\Protobuf\Internal\GPBUtil;

class helloworld extends \Google\Protobuf\Internal\Message
{
    ....
}

Read 中のコードをダウンロードすると、Google\Protobuf の下のクラスが使用されていることがわかります。これは PHP ライブラリです。ダウンロードできます:

https://github.com/google/protobuf/tree/master /php/ src/Google/Protobuf

は、composer を使用してプロジェクトに導入することもできます。composer が自動的に Autoloader を生成するため、composer を使用することをお勧めします:

composer require google/protobuf

Google/ を導入した後コンポーザーを使用して protobuf を実行すると、プロジェクトにベンダー ディレクトリが表示されます。独自のコードでは、includevendor の下に autoload.php と生成された helloworld.pb.php ファイルを含めることで、バイナリの読み取りと書き込みを行うことができます。

簡単な読み取りと書き込みの例

google/protobuf ライブラリの助けを借りて、PHP が protobuf 形式でバイナリを読み書きするのは非常に便利です。

protobuf を使用してバイナリ ファイルにデータを書き込む:

<?php
include &#39;vendor/autoload.php&#39;;
include &#39;hello.pb.php&#39;;

$from = new \Lm\helloworld();
$from->setId(1);
$from->setStr(&#39;foo bar, this is a message&#39;);
$from->setOpt(29);

$data = $from->serializeToString();
file_put_contents(&#39;data.bin&#39;, $data);

同じバイナリ ファイルを読み取る:

<?php
include &#39;vendor/autoload.php&#39;;
include &#39;hello.pb.php&#39;;

$data = file_get_contents(&#39;data.bin&#39;);
$to = new \Lm\helloworld();
$to->mergeFromString($data);

echo $to->getId() . PHP_EOL;
echo $to->getStr() . PHP_EOL;
echo $to->getOpt() . PHP_EOL;

推奨される学習: php ビデオ チュートリアル

以上がPHP で protobuf3 を読み書きする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。