protobuffer是谷歌发布的一种数据传输方式,具有具体压缩、体积小的特点
protobuffer本身不支持php,必须使用第三方程序将. proto文件转换为php支持的文件
一.下载并安装protoc编译器
tar-xzfprotobuf-2.4.1.tar.gzcdprotobuf-2.4.1
cd protobuf-2.1.0
./configure---prefix=/usr/local/proto
化妆
制造商检查
制造安装
下载并安装支持protoc的php扩展
33559 github.com/ch obie/PHP-protocol buffers
wget---- no-check-certificate 3359 github.com/ch obie/PHP-protocol buffers/archive/master.zip
unzipmastercdphp -协议缓冲器- master /
/usr/local/php5/高兴柜/phpize
./configure-- with-PHP-config=/usr/local/PHP5/高兴的储物柜/php-config
生成安装
重新启动php
kill-usr2` cat/usr/local/PHP5/var/run/PHP-fpm.PID `
生成的. so文件是protocolbuffers.so
allegro/php-protobuf本身具有扩展,还支持将. proto文件转换为php文件
生成的. so文件是protobuf.so
三.下载drslump/Protobuf-PHP获取protoc-gen-php插件
的双曲正弦值
/usr/local/php5/高兴的储物柜/pear channel-discover pear.pollin imini.net
/usr/local/php5/高兴的储物柜/pearinstalldrslump/proto buf-beta
四.将proto文件转换为php文件
/usr/local/proto/高兴的储物柜/protoc-- plugin=protoc-gen-PHP=‘/home/source/proto buf-PHP-master/protoc
执行后的错误报告
PHP warning : declarationofgoogleproto bufdescriptor proto :3360 clear extension (shouldbecompatiblewithdrslump ) 消息:3360 clear extension ($ extname ) in/home/source/proto buf-PHP-master/library/dr slump/proto buf/coof
- PHP _ out : protoc-gen-PHP : pluginoutputisunparseable。
类中的方法重复。 评论一下就好了
PHP warning : missing argument1fordr slumpproto buf message33603360hasextension (,called in/home/source/proto buf-PHP-master/library/dr slump/proto buf/compiler/PHP generator.PHP online 280 and dine proto buf-PHP-master/library/dr slump/proto buf/message.PHP online 283
PHP notice 3360 undefined variable : extname in/home/source/proto buf-PHP-master/library/dr slump/proto buf/messa AAA
PHP warning : missing argument1fordr slumpproto buf message33603360hasextension (,called in/home/source/proto buf-PHP-master/library/dr slump/proto buf/compiler/PHP generator.PHP online 87 andeer proto buf-PHP-master/library/dr slump/proto buf/message.PHP online 283
PHP notice 3360 undefined variable : extname in/home/source/proto buf-PHP-master/library/dr slump/proto buf/messa AAA
- PHP _ out : protoc-gen-PHP : pluginoutputisunparseable。
library/dr slump/proto buf/compiler/PHP generator.PHP
87行
if ($ proto-has扩展) ) ) }
中选择另一种天花板类型
if($proto-hasextension () null ) )。
280行
if ($ msg-has扩展) ) )
中选择另一种天花板类型
if ($ msg-has扩展() null ) )。
VI/home/source/proto buf-PHP-master/library/dr slump/proto buf/compiler/CLI.PHP
添加第二行
set _ include _ path (‘./usr/local/PHP5/share/pear /‘)
可执行文件
使用allegro/php-protobuf时,这似乎是protoc的php客户端
wget 3359 github.com/allegro/PHP-proto buf/archive/master.zip
unzip master.zipcdphp-proto buf-master
/usr/local/php5/高兴柜/phpize
./configure-- with-PHP-config=/usr/local/PHP5/高兴的储物柜/php-config
生成安装
重新启动php
kill-usr2` cat/usr/local/PHP5/var/run/PHP-fpm.PID `
使用方法
/usr/local/php5/高兴的储物柜/PHP/home/source/aa/ab/CD/PHP-proto buf-master/protoc-PHP.PHP-t.test 2
请务必用-t表示输入文件的路径。 否则,不会输出文件
示例:
vi test2.proto
message PhoneNumber {
requiredstring number=1;
required int32 type=2;
}
消息人员{
要求字符串名称=1;
required int32 id=2;
选项字符串电子邮件=3;
repeated PhoneNumber phone=4;
optionaldouble money=5;
}
消息地址簿{
repeated Person person=1;
}
生成与proto相对应的php文件
/usr/local/php5/高兴的储物柜/PHP/home/source/aa/ab/CD/PHP-proto buf-master/protoc-PHP.PHP-t.test 2
viexample_2.php
? PHP require _ once‘Pb _ proto _ test2. PHP‘; $foo=newPerson (; $ foo-set name (‘ABC’); $foo-setId(1() 1; $ foo-set email (‘ABC’); $foo-setMoney(321321.32 ); $phone_num=newPhoneNumber (; $ phone _ num-setnumber (16589875625 ); $phone_num-settype(3; $foo-appendphone($phone_num ); //$foo-appendphone(2;
$packed=$foo-serializeToString (; //echo $packed; 退出; #$foo-clear (;
echo-------- src-----src---- -; echo $foo-getName ().' (n ); echo $foo-getPhone () [0]-getNumber ).'n '; $foo-dump (; echo------------nn '; try{$p=newPerson (; $p-parsefromstring($packed ); echo---------parsed-----n '; echo $p-getName ().' (n ); echo $p-getEmail ().' (n ); echo $p-getMoney ().' (n ); echo $p-getId ().' (n ); echo $p-getPhone () [0]-getNumber ).'n '; //$p-dump (;
ECHO--------n '; //print_r($Xiao );
}catch(exception$ex ) die ) (upss . thereisabuginthisexample‘);
}
运行php文件
/usr/local/php5/高兴的储物柜/php example_2.php
原文: http://www.cnblogs.com/胡子山水/p/5470693.html