Home > 技術, 日記 > Google の Protocol Buffer PHP実装メモ

Google の Protocol Buffer PHP実装メモ

1 月 16th, 2010

どうも羊です。

前回で頑張るこ事リストで書いたGoogleProtocol Buffer

今回、PHPでのHTTP通信を利用した実装をやってみたんでメモを残しておきます。

通常の Protocol Bufferの実装では、C++, Java, Python は対応していますが、
PHPは残念ながら対応していません。
検索すると、pb4php を発見、早速試す事に。

ダウンロード
# cd /usr/local/src/
# wget http://pb4php.googlecode.com/files/protocolbuf_025.zip

解凍
# tar zxvf protocolbuf_025.zip

PEAR モジュールをコピー
# cp -R protocolbuf /{PEAR_DIR}/

インストール終了

早速サンプルを実行

まずデータ型を宣言を.protoに格納

test.proto

 
message Person
{
required string name = 1;
required int32 id = 2;
optional string email = 3;

enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}

message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
// a simple comment
repeated PhoneNumber phone = 4;
}

message AddressBook {
repeated Person person = 1;
}

.protoをPHPの読み取りソース出力
protoc.php

<?php
require_once(’protocolbuf/parser/pb_parser.php’);

$test = new PBParser();
$test->parse(’./test.proto’);

?>

送信側

test_send.php


<?php
require_once(’protocolbuf/message/pb_message.php’);

//
require_once(’./pb_proto_test.php’);

$book = new AddressBook();
$person = $book->add_person();
$person->set_name(’Nikolai’);
$person = $book->add_person();
$person->set_name(’Kordulla’);
$person->set_surname(’MySurname’);

$phone_number = $person->add_phone();
$phone_number->set_number(’0711′);
$phone_number->set_type(Person_PhoneType::WORK);

$phone_number = $person->add_phone();
$phone_number->set_number(’0171′);
$phone_number->set_type(Person_PhoneType::MOBILE);

$phone_number = $person->add_phone();
$phone_number->set_number(’030′);

// serialize
$string = $book->SerializeToString();

print $string;

?>

受信側
test_recv.php


<?php
require_once(’protocolbuf/message/pb_message.php’);

//
require_once(’./pb_proto_test.php’);

$string = file_get_contents(’http://mydomain/test_send.php’);

$book = new AddressBook();
$book->parseFromString($string);

var_dump($book->person_size());
$person = $book->person(0);
var_dump($person->name());
$person = $book->person(1);
var_dump($person->name());
var_dump($person->phone(0)->number());
var_dump($person->phone(0)->type());
var_dump($person->phone(1)->number());
var_dump($person->phone(1)->type());
var_dump($person->phone(2)->number());
var_dump($person->phone(2)->type());
?>

以上。

出力が確認できたらOK。かなり簡単

技術, 日記

  1. No comments yet.
  1. No trackbacks yet.