收藏一篇文章 没有实际操作过 . 公司再用都是直接用现成的东西 这片文章收藏一下

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使用相关推荐

  1. PHP probuf详细步骤_初识protobuf和php的相关用法

    前言 大家好,这是我在博客园的第一篇博文,很早之前就想尝试开通技术博客了,但是由于各种原因计划一直都没有实施.开通博客只是想简单的记录下自己生活工作相关的一些事情,之前一直在用evernote记录,无 ...

  2. 法的详细步骤_空气能热水工程安装步骤讲解

    空气能热水工程在施工之前,首先需要熟悉空气能热水管道布局以及施工图纸,对现场的电源.电压及线路情况进行全方位的检测,对空气能热水工程并行管路配件进行城北预算,确保空气能热水工程能够保质保量完成.下面, ...

  3. 计算机课件制作教程ppt,电脑制作ppt详细步骤_新手制作ppt详细步骤图文教程

    ppt大家应该都不陌生了,我们日常办公时经常会需要制作ppt.可是对于新手来说,还不太清楚电脑制作ppt详细步骤.那么今天小编就为大家带来新手制作ppt详细步骤图文教程,一起来看看吧. 新手制作ppt ...

  4. 用计算机做图画ppt,电脑制作ppt详细步骤_新手制作ppt详细步骤图文教程

    ppt大家应该都不陌生了,我们日常办公时经常会需要制作ppt.可是对于新手来说,还不太清楚电脑制作ppt详细步骤.那么今天小编就为大家带来新手制作ppt详细步骤图文教程,一起来看看吧. 新手制作ppt ...

  5. 三阶矩阵的lu分解详细步骤_数学 - 线性代数导论 - #4 矩阵分解之LU分解的意义、步骤和成立条件...

    线性代数导论 - #4 矩阵分解之LU分解的意义.步骤和成立条件 目前我们用于解线性方程组的方法依然是Gauss消元法.在Gauss消元法中,我们将右侧向量b与A写在一起作为一个增广矩阵进行同步的操作 ...

  6. svm分类器训练详细步骤_「五分钟机器学习」向量支持机SVM——学霸中的战斗机...

    大家好,我是爱讲故事的某某某. 欢迎来到今天的[五分钟机器学习]专栏内容 --<向量支持机SVM> 今天的内容将详细介绍SVM这个算法的训练过程以及他的主要优缺点,还没有看过的小伙伴欢迎去 ...

  7. 克里金插值详细步骤_暖气片怎么放气?暖气片怎样排空气?步骤和方法,规范详细!...

    暖气片怎么放气?暖气片怎样排空气?步骤和方法,规范详细!如果排气方式不当,可能造成部分气体积存在系统中,对运行产生不利的影响.今天,金旗舰旗哥就和大家说说如何规范.准确的给自家的暖气片系统排气. 关键 ...

  8. PHP probuf详细步骤_go+protobuf+php简单示例

    go get github.com/golang/protobuf/protoc-gen-go go get github.com/golang/protobuf/proto proto文件 synt ...

  9. hadoop安装详细步骤_推荐一个超详细的Hadoop安装教程,已有32万次阅读

    安装Hadoop软件系列,首选Linux系统,比如Ubuntu.如果你的系统是Windows,建议再安装一个Ubuntu,组成双系统,如此可以发挥各自系统的特点. 使用U盘制作一个系统,拿出一块分区用 ...

最新文章

  1. 63. Unique Paths II 动态规划
  2. 鸿蒙系统适配机型_华为鸿蒙 OS 适配机型曝光,除了 Mate 40 还有这几款!
  3. 按一行一行的方法将一个文本文件复制到另一个文件中_命令行技巧:分割文件内容...
  4. javascript进阶课程--第一章--函数
  5. 二维数组和指针(包含交换二维数组行列)
  6. Java 基础系列:不变性
  7. 用于薄膜太阳能电池的玻璃上大晶粒多晶硅
  8. 2021年低压电工新版试题及低压电工考试总结
  9. Learning to Fuse Asymmetric Feature Maps in Siamese Trackers 论文与代码笔记
  10. 【产业互联网周报】网信办:不得利用算法影响网络舆论;华为任命丁耘为企业BG总裁;上海市布局数字经济、元宇宙等新赛道...
  11. MMD导入unity中使用
  12. 广东公需科目公需课十四五答案考试查询器
  13. C#使用原生方法将文字朗读出来
  14. 在Vivado下如何判断芯片是多die芯片-关于SSI的多方面解答
  15. Unity3d 周分享(13期 2019.3.23 )
  16. 刘润《商业简史》读书笔记--拾间房
  17. [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
  18. 315道Python面试题答案
  19. CubeMx工程,jlink无法识别到设备
  20. 打印圆周率指定位数之python

热门文章

  1. Azure Cosmos DB(Azure 宇宙数据库)--地球已无法阻止微软玩数据库了
  2. 消息中间件在分布式系统中的作用及介绍
  3. matplotlib mysql_matplotlib简介
  4. 苹果启动“突围”计划 建立自营金融服务
  5. 4月1日起 理想ONE零售价由33.8万元上调至34.98万元
  6. 三部门部署开展非学科类校外培训收费专项整治工作
  7. realme真我GT2系列节后登场:出厂自带realme UI 3.0正式版
  8. 聚划算的夜场新生意 “三叉戟”打通夜间消费命脉
  9. 某自媒体发布“抢小孩”视频,最高近25万次点赞,结果竟是自导自演!
  10. 苹果抄袭豌豆射手实锤!AirPods Pro又被玩坏了...