使用したリソース: https://github.com/allegro/php-protobuf/
解凍ディレクトリに入って実行: phpize
./configure
make
make install
# 次の行を php.ini に追加してください
extension=protobuf.so
PHP を再起動します
phpinfo() protobuff 拡張機能が表示されます
使い方?
保存
最初に proto ファイル foo.proto ファイルを作成します
message PhoneNumber {
必須の文字列番号 = 1;
必須 int32 タイプ = 2;
}
メッセージ パーソン {
必須文字列名 = 1;
必須 int32 id = 2;
オプションの文字列 email = 3;
繰り返し PhoneNumber 電話 = 4;
}
message AddressBook {
繰り返し 人person = 1 ;
}
次に、コマンドを使用して
php protoc-php.php foo.proto
この時点で、pb_proto_foo を生成します.php ファイルが生成されます
具体的なアプリケーションは次のとおりです。
JAVA で通信する場合。 protobuffer は、次のような php ファイル test.php を保存します。
require_once 'pb_proto_test.php';
$packed =curlGet('http://10.0.247.113:8080/testweb/proto' ); //JAVA によって返されるバッファ情報です。
$foo = new AddressBook();
try {
$foo->parseFromString($packed) ;
} catch (Exception $ex) {
die('解析エラー: ' . $e->getMessage());
}
$pb = $foo->getperson();
//print_r($pb);
//print_r($pb[0]);
echo $pb[0]->getName() .' _ '.$pb[0]->getId() .' _ ';
print_r($pb[0]-> getPhone( ));
バッファ データを変更するための PHP 呼び出し
------------------ - -------
require_once 'pb_proto_test.php';
$foo = new Person();
$foo->setName('xiaojh ' );
$foo->setId(200);
$foo->setEmail('dofound@163.com');
//$ foo ->appendPhone(2);
$packed = $foo->serializeToString();
$foo->clear();
try {
$xiao = $foo->parseFromString($packed);
//print_r($xiao);
} catch (Exception $ex) {
die('うーん、この例にはバグがあります');
}
echo $foo->getName();
echo $ foo->getPhone()->number;
$foo->dump();
PHP 内部呼び出し
-----------------------------
バッファデータの生成