PHP probuf详细步骤_【转】protobuffer php使用
收藏一篇文章 没有实际操作过 . 公司再用都是直接用现成的东西 这片文章收藏一下
protobuffer是google推出的一种数据传的方式,具体压缩,体积小的特点
protobuffer本身不支持php,若要把.proto文件转化为php支持的文件,需要使用第三方的程序
allegro/php-protobuf 或 drslump/Protobuf-PHP
使用drslump/Protobuf-PHP
一.下载并安装protoc编译器tar -xzf protobuf-2.4.1.tar.gz && cd protobuf-2.4.1
cd protobuf-2.1.0
./configure --prefix=/usr/local/proto
make
make check
make install
二.下载并安装protoc对应的php扩展wget --no-check-certificate https://github.com/chobie/php-protocolbuffers/archive/master.zip
unzip master && cd php-protocolbuffers-master/
/usr/local/php5/bin/phpize
./configure --with-php-config=/usr/local/php5/bin/php-config
make && make install
重启phpkill -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/bin/pear channel-discover pear.pollinimini.net
/usr/local/php5/bin/pear install drslump/Protobuf-beta
四.将.proto文件转为php文件/usr/local/proto/bin/protoc --plugin=protoc-gen-php='/home/source/Protobuf-PHP-master/protoc-gen-php.php' --proto_path='/home/source/Protobuf-PHP-master' --php_out=':./' '/home/source/Protobuf-PHP-master/test.proto'
执行后报错PHP Warning: Declaration of google\protobuf\DescriptorProto::clearExtension() should be compatible with DrSlump\Protobuf\Message::clearExtension($extname) in /home/source/Protobuf-PHP-master/library/DrSlump/Protobuf/Compiler/protos/descriptor.pb.php on line 688
--php_out: protoc-gen-php: Plugin output is unparseable.
类中的方法重复了,注释掉它就行PHP Warning: Missing argument 1 for DrSlump\Protobuf\Message::hasExtension(), called in /home/source/Protobuf-PHP-master/library/DrSlump/Protobuf/Compiler/PhpGenerator.php on line 280 and defined in /home/source/Protobuf-PHP-master/library/DrSlump/Protobuf/Message.php on line 283
PHP Notice: Undefined variable: extname in /home/source/Protobuf-PHP-master/library/DrSlump/Protobuf/Message.php on line 285
PHP Warning: Missing argument 1 for DrSlump\Protobuf\Message::hasExtension(), called in /home/source/Protobuf-PHP-master/library/DrSlump/Protobuf/Compiler/PhpGenerator.php on line 87 and defined in /home/source/Protobuf-PHP-master/library/DrSlump/Protobuf/Message.php on line 283
PHP Notice: Undefined variable: extname in /home/source/Protobuf-PHP-master/library/DrSlump/Protobuf/Message.php on line 285
--php_out: protoc-gen-php: Plugin output is unparseable.library/DrSlump/Protobuf/Compiler/PhpGenerator.php
87行if ($proto->hasExtension()) {
改为if ($proto->hasExtension(null)) {
280行if ($msg->hasExtension()) {
改为if ($msg->hasExtension(null)) {vi /home/source/Protobuf-PHP-master/library/DrSlump/Protobuf/Compiler/Cli.php
第二行添加set_include_path('.:/usr/local/php5/share/pear/');
可执行文件了
使用allegro/php-protobuf 貌似这是个protoc的php客户端wget https://github.com/allegro/php-protobuf/archive/master.zip
unzip master.zip && cd php-protobuf-master
/usr/local/php5/bin/phpize
./configure --with-php-config=/usr/local/php5/bin/php-config
make && make install
重启phpkill -USR2 `cat /usr/local/php5/var/run/php-fpm.pid`
使用方法/usr/local/php5/bin/php /home/source/aa/ab/cd/php-protobuf-master/protoc-php.php -t . test2.proto
注意一定要加上 -t 表示输入文件的路径,不然没有文件被输出
例子:vi test2.protomessage PhoneNumber {
required string number = 1;
required int32 type = 2;
}
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
repeated PhoneNumber phone = 4;
optional double money = 5;
}
message AddressBook {
repeated Person person = 1;
}
生成proto对应的php文件/usr/local/php5/bin/php /home/source/aa/ab/cd/php-protobuf-master/protoc-php.php -t . test2.proto
/usr/local/php/bin/php -c /usr/local/php/lib/php.ini /home/source/php-7.0.2/ext/protobuf/protoc-php.php -t . test_3.proto
vi example_2.php<?php
require_once 'pb_proto_test2.php';
$foo = new Person();
$foo->setName('abc');
$foo->setId(1);
$foo->setEmail('abc');
$foo->setMoney(321321.32);
$phone_num = new PhoneNumber();
$phone_num->setNumber('16589875625');
$phone_num->setType(3);
$foo->appendPhone($phone_num);
//$foo->appendPhone(2);
$packed = $foo->serializeToString();
//echo $packed;exit;
#$foo->clear();
echo "-----------src------------\n";
echo $foo->getName() ."\n";
echo $foo->getPhone()[0]->getNumber() ."\n";
$foo->dump();
echo "------------------------\n\n\n";
try {
$p = new Person();
$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.. there is a bug in this example');
}
执行php文件/usr/local/php5/bin/php example_2.php
PHP probuf详细步骤_【转】protobuffer php使用相关推荐
- PHP probuf详细步骤_初识protobuf和php的相关用法
前言 大家好,这是我在博客园的第一篇博文,很早之前就想尝试开通技术博客了,但是由于各种原因计划一直都没有实施.开通博客只是想简单的记录下自己生活工作相关的一些事情,之前一直在用evernote记录,无 ...
- 法的详细步骤_空气能热水工程安装步骤讲解
空气能热水工程在施工之前,首先需要熟悉空气能热水管道布局以及施工图纸,对现场的电源.电压及线路情况进行全方位的检测,对空气能热水工程并行管路配件进行城北预算,确保空气能热水工程能够保质保量完成.下面, ...
- 计算机课件制作教程ppt,电脑制作ppt详细步骤_新手制作ppt详细步骤图文教程
ppt大家应该都不陌生了,我们日常办公时经常会需要制作ppt.可是对于新手来说,还不太清楚电脑制作ppt详细步骤.那么今天小编就为大家带来新手制作ppt详细步骤图文教程,一起来看看吧. 新手制作ppt ...
- 用计算机做图画ppt,电脑制作ppt详细步骤_新手制作ppt详细步骤图文教程
ppt大家应该都不陌生了,我们日常办公时经常会需要制作ppt.可是对于新手来说,还不太清楚电脑制作ppt详细步骤.那么今天小编就为大家带来新手制作ppt详细步骤图文教程,一起来看看吧. 新手制作ppt ...
- 三阶矩阵的lu分解详细步骤_数学 - 线性代数导论 - #4 矩阵分解之LU分解的意义、步骤和成立条件...
线性代数导论 - #4 矩阵分解之LU分解的意义.步骤和成立条件 目前我们用于解线性方程组的方法依然是Gauss消元法.在Gauss消元法中,我们将右侧向量b与A写在一起作为一个增广矩阵进行同步的操作 ...
- svm分类器训练详细步骤_「五分钟机器学习」向量支持机SVM——学霸中的战斗机...
大家好,我是爱讲故事的某某某. 欢迎来到今天的[五分钟机器学习]专栏内容 --<向量支持机SVM> 今天的内容将详细介绍SVM这个算法的训练过程以及他的主要优缺点,还没有看过的小伙伴欢迎去 ...
- 克里金插值详细步骤_暖气片怎么放气?暖气片怎样排空气?步骤和方法,规范详细!...
暖气片怎么放气?暖气片怎样排空气?步骤和方法,规范详细!如果排气方式不当,可能造成部分气体积存在系统中,对运行产生不利的影响.今天,金旗舰旗哥就和大家说说如何规范.准确的给自家的暖气片系统排气. 关键 ...
- PHP probuf详细步骤_go+protobuf+php简单示例
go get github.com/golang/protobuf/protoc-gen-go go get github.com/golang/protobuf/proto proto文件 synt ...
- hadoop安装详细步骤_推荐一个超详细的Hadoop安装教程,已有32万次阅读
安装Hadoop软件系列,首选Linux系统,比如Ubuntu.如果你的系统是Windows,建议再安装一个Ubuntu,组成双系统,如此可以发挥各自系统的特点. 使用U盘制作一个系统,拿出一块分区用 ...
最新文章
- 63. Unique Paths II 动态规划
- 鸿蒙系统适配机型_华为鸿蒙 OS 适配机型曝光,除了 Mate 40 还有这几款!
- 按一行一行的方法将一个文本文件复制到另一个文件中_命令行技巧:分割文件内容...
- javascript进阶课程--第一章--函数
- 二维数组和指针(包含交换二维数组行列)
- Java 基础系列:不变性
- 用于薄膜太阳能电池的玻璃上大晶粒多晶硅
- 2021年低压电工新版试题及低压电工考试总结
- Learning to Fuse Asymmetric Feature Maps in Siamese Trackers 论文与代码笔记
- 【产业互联网周报】网信办:不得利用算法影响网络舆论;华为任命丁耘为企业BG总裁;上海市布局数字经济、元宇宙等新赛道...
- MMD导入unity中使用
- 广东公需科目公需课十四五答案考试查询器
- C#使用原生方法将文字朗读出来
- 在Vivado下如何判断芯片是多die芯片-关于SSI的多方面解答
- Unity3d 周分享(13期 2019.3.23 )
- 刘润《商业简史》读书笔记--拾间房
- [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
- 315道Python面试题答案
- CubeMx工程,jlink无法识别到设备
- 打印圆周率指定位数之python
热门文章
- Azure Cosmos DB(Azure 宇宙数据库)--地球已无法阻止微软玩数据库了
- 消息中间件在分布式系统中的作用及介绍
- matplotlib mysql_matplotlib简介
- 苹果启动“突围”计划 建立自营金融服务
- 4月1日起 理想ONE零售价由33.8万元上调至34.98万元
- 三部门部署开展非学科类校外培训收费专项整治工作
- realme真我GT2系列节后登场:出厂自带realme UI 3.0正式版
- 聚划算的夜场新生意 “三叉戟”打通夜间消费命脉
- 某自媒体发布“抢小孩”视频,最高近25万次点赞,结果竟是自导自演!
- 苹果抄袭豌豆射手实锤!AirPods Pro又被玩坏了...