首頁  >  文章  >  後端開發  >  PHP中處理Protocol Buffers數據

PHP中處理Protocol Buffers數據

jacklove
jacklove原創
2018-05-22 09:55:222435瀏覽

本篇將會說明PHP中處理Protocol Buffers資料的相關問題。

Protocol Buffers 是一種輕巧高效的結構化資料儲存格式,可用於結構化資料串列化,很適合做資料儲存或 RPC 資料交換格式。它可用於通訊協定、資料儲存等領域的語言無關、平台無關、可擴展的序列化結構資料格式。目前提供了 C 、Java、Python 三種語言的 API。

安裝protoc編譯器

下載安裝

$ 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

安裝驗證:

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

php擴充功能

安裝php擴充功能

$ 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

php.ini設定檔中新增: extension = "protocolbuffers.so"

$ php -m | grep protocolbuffers
protocolbuffers

protoc外掛程式##

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

測試:

寫proto檔

$ 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;
}

產生php類別庫程式碼

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


#編寫測試檔:

$ vim demo.proto.php<?phpspl_autoload_register(function($name){  static $classmap;  if (!$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());

測試

$ php demo.proto.php 
string(15) "压缩数据:"string(13) "
Jack500"string(15) "获取数据:"string(4) "Jack"string(2) "28"string(3) "500"

本篇講解了PHP中處理Protocol Buffers資料的相關內容,更多相關知識請關注php中文網。

相關推薦:

關於PHP快遞查詢類別

#php透過curl傳送XML數據,並取得XML數據

PHP完美產生word文檔,可加入html元素
#

以上是PHP中處理Protocol Buffers數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn