服务器环境Ubuntu 18.04.5 LTS
PHP7.2.24
装置protoc
1.获取v3.13.0.1(截止2020.10.14) wget https://codeload.github.com/protocolbuffers/protobuf/tar.gz/v3.13.0.1 2.解压 tar zxvf v3.13.0.1 cd protobuf-3.13.0.1 1.生成 configure 脚本; ./autogen.sh 2.编译装置 ./configure --prefix=/usr/local/protobuf make && make install 3.设置全局 export PATH=/usr/local/protobuf/bin:$PATH 4.查看装置胜利 protoc --version 呈现`libprotoc 3.13.0`即装置胜利
装置php-protobuf拓展
pecl install protobuf 接下来,将 `extension=protobuf.so`增加到 `php.ini` 文件(例如 `/etc/php/7.2/fpm/php.ini`)中。 查看php.ini地位 1.cli命令行 php --ini 2.phpinfo(); 3.ps -ef | grep php
在我的项目根目录
protoc --php_out="protobuf/compile" "protobuf/protos/DmpDataProto.proto"
生成的构造
├── compile │ ├── GPBMetadata │ │ └── Protobuf │ │ └── Protos │ │ └── DmpDataProto.php │ └── Toutiao │ └── Dmp │ ├── DmpData.php │ ├── IdItem_DataType.php │ └── IdItem.php └── protos └── DmpDataProto.proto
composer
composer require google/protobuf:^3.3
在composer.json
配置
"autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/", +"Toutiao\\":"protobuf/compile/Toutiao", +"GPBMetadata\\":"protobuf/compile/GPBMetadata/Protobuf/Protos" } },
应用
//获取序列化的一行 public function decodeOneLine($line) { $idItem = new \Toutiao\Dmp\IdItem(); $idItem->setDataType(\Toutiao\Dmp\IdItem_DataType::IMEI); $idItem->setId(strtolower($line)); $idItem->setTags('IMEI'); $binaryString = $idItem->serializeToString(); return $binaryString; } //获取反序列化的一行 public function decodeOneLine($line) { $item = new \Toutiao\Dmp\IdItem(); $item->mergeFromString($line); return $item->getId(); }
次要为为了上传头条dmp包,然而头条是protobuf2,emmm今天再看吧
未完待续