Rumah > pembangunan bahagian belakang > tutorial php > PHP中处理Protocol Buffers数据

PHP中处理Protocol Buffers数据

jacklove
Lepaskan: 2023-03-27 10:52:02
asal
2475 orang telah melayarinya

本篇将会讲解PHP中处理Protocol Buffers数据的相关问题。

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

安装protoc编译器

下载安装

1

2

3

4

5

6

$ wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz

$ tar zxvf protobuf-2.5.0.tar.gz

$ cd protobuf-2.5.0

$ ./configure --prefix=/usr/local/protobuf

$ sudo make

$ sudo  make install

Salin selepas log masuk

安装验证:

1

2

$ /usr/local/protobuf/bin/protoc  --version

libprotoc 2.5.0

Salin selepas log masuk

php扩展

安装php扩展

1

2

3

4

5

6

7

$ wget https://pecl.php.net/get/protocolbuffers-0.2.6.tgz

$ tar zxvf protocolbuffers-0.2.6.tgz

$ cd protocolbuffers-0.2.6

$ phpize

$ ./configure

$ sudo make

$ sudo  make install

Salin selepas log masuk

php.ini配置文件中添加 : extension = "protocolbuffers.so"

$ php -m | grep protocolbuffers
protocolbuffers

protoc插件

1

$ mkdir ~/code/app$ cd ~/code/app$ composer require protocolbuffers/protoc-gen-php

Salin selepas log masuk

测试:

编写proto文件

1

2

3

4

5

6

7

8

9

10

11

12

$ vim demo.proto

syntax = "proto2";

package Proto.Demo;

message OrderInfo {

    required string name = 1 ;

    required int32 age = 2;

    required string amount = 3;

}

message UserInfo {

    required int32 uid = 1;

    required string address = 2;

}

Salin selepas log masuk

生成php类库代码

$ /usr/local/protobuf/bin/protoc --plugin=vendor/bin/protoc-gen-php --php_out=. -I. demo.proto

编写测试文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

$ vim demo.proto.php<?phpspl_autoload_register(function($name){  static $classmapif (!$classmap) {

    $classmap = array(      &#39;Proto\Demo\OrderInfo&#39; => &#39;/Proto/Demo/OrderInfo.php&#39;,      &#39;Proto\Demo\UserInfo&#39; => &#39;/Proto/Demo/UserInfo.php&#39;,      // @@protoc_insertion_point(autoloader_scope:classmap)

    );

  if (isset($classmap[$name])) {    require __DIR__ . DIRECTORY_SEPARATOR . $classmap[$name];

  }

});

call_user_func(function(){

  $registry = \ProtocolBuffers\ExtensionRegistry::getInstance();  // @@protoc_insertion_point(extension_scope:registry)});

$oi = new Proto\Demo\OrderInfo();

$oi->setName(&#39;Jack&#39;);

$oi->setAge(28);

$oi->setAmount(&#39;500&#39;);//压缩数据$protoData = $oi->serializeToString();

var_dump("压缩数据:");

var_dump($protoData);//获取到$age的值$obj = Proto\Demo\OrderInfo::parseFromString($protoData);

var_dump("获取数据:");

var_dump($obj->getName());

var_dump($obj->getAge());

var_dump($obj->getAmount());

Salin selepas log masuk

测试

1

2

3

$ php demo.proto.php

string(15) "压缩数据:"string(13) "

Jack500"string(15) "获取数据:"string(4) "Jack"string(2) "28"string(3) "500"

Salin selepas log masuk

本篇讲解了PHP中处理Protocol Buffers数据的相关内容,更多相关知识请关注php中文网。

相关推荐:

关于PHP快递查询类

php通过curl发送XML数据,并获取XML数据

PHP完美生成word文档,可加入html元素

Atas ialah kandungan terperinci PHP中处理Protocol Buffers数据. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan