google protocol buffers 折腾记 (PHP7.1.5,CentOS6.5) 手记

Skiy 11天前 7

2019-08-30 提示:

两年过去了,代码也有了对应的更新。

https://github.com/allegro/php-protobuf 当前主分支

PHP 7.0 or above (for PHP 5 support refer to php5 branch)

Pear’s Console_CommandLine (for the protoc plugin)

Google’s protoc compiler version 2.6 or above

————————————————————-

https://github.com/allegro/php-protobuf/tree/php5 PHP5 分支

PHP 5.3 or above

Pear’s Console_CommandLine (for the protoc plugin)

Google’s protoc compiler version 2.6 or above

————————————————————-

https://github.com/serggp/php-protobuf/tree/php7 fork 版本

PHP 7.0 or above

Pear’s Console_CommandLine (for the protoc plugin)

Google’s protoc compiler version 2.6 or above

————————————————————————-

————————————————————————-

由于是接手别人的坑,……,这里省略一大堆废话。


系统装的是 CentOS6.5,PHP 装的是PHP5.3。


然而作为一名追求性能的渣渣开发者来说,PHP的版本太低了~有很多新特征及优秀的开发框架不支持这么低的PHP版本。

上一个项目,为了方便下一位填坑者,所以我把前坑给填了(重新用CI框架把整个系统给改了)~~~还好CI3兼容性还OK~~~


但是,新项目要来了,我打算用TP来写(也是为了方便后人来接坑,所以用了国内通用的,而不用国外主流的YII之流)。当然是用了最新版本的TP5(因为之前也没怎么用过TP3,官方也停止了TP3的技术支持)。


嗯,所以~~~就把原来的WEB环境给全改了。把apache+php5.3改成了nginx+php5.3+~php7.1。

因为之前已经把旧项目重写了,所以基本完全支持。

然而,遇到坑了。protobuf不支持php7啊。


先列举一下之前用的 protobuf:https://github.com/allegro/php-protobuf,(介绍说是PHP 5.3 or above,但安装好后发现不支持php7),最后在 issues(https://github.com/allegro/php-protobuf/issues/46) 下找到了 关于支持PHP7的讨论,最后找到了支持PHP7的分支:https://github.com/serggp/php-protobuf/tree/php7


接下来,按流程走:

下载,解压,编译,修改php.ini。一样都不能少,最后重启 php-fpm,查看phpinfo是否已支持。

wget https://github.com/serggp/php-protobuf/archive/php7.zip
unzip php7.zip
cd php-protobuf-php7/
/www/server/php/71/bin/phpize
./configure --with-php-config=/www/server/php/71/bin/php-config
make
make install


修改php.ini,将 protobuf.so 添加至 php.ini,并重启PHP

ls /www/server/php/71/lib/php/extensions/no-debug-non-zts-20160303
protobuf.so
service php-fpm-71 restart


PHPINFO

protobuf
Version 0.11.0


说明PHP7已支持protobuf。

然而还不能使用

php protoc-gen-php.php -o output_dir foo.proto


需要执行

将php-protobuf环境处理好。

嗯。还有个问题。必须要安装protobuf2.6.x以上

这个就得去google官方找了。。。


由于protobuf已经到了3.x版本,不知道是否完全兼容2.6.x及以下的代码,所以为了安装,我们就找到了2.x的最终版本: 2.6.1

https://github.com/google/protobuf/releases?after=v3.0.0-alpha-1

一样的流程,下载,安装。

wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz

再按照教程走一遍就行了。

https://github.com/google/protobuf/tree/bba83652e1be610bdb7ee1566ad18346d98b843c

tar -zxvf protobuf-2.6.1.tar.gz
cd protobuf-2.6.1
./autogen.sh
./configure
make
make check
make install


测试。。。。。

问题1:

php protoc-gen-php.php /data/Protocol/BUSINESS_GET_USER_BASEINFO.proto
protoc: error while loading shared libraries: libprotobuf.so.9: cannot open shared object file: No such file or directory
ERROR: Unable to find the protoc command. Please make sure it's installed and available in the path.


解决方案:

https://stackoverflow.com/questions/25518701/protobuf-cannot-find-shared-libraries

export LD_LIBRARY_PATH=/usr/local/lib


最后show一下log:

protoc --version
libprotoc 2.6.1
You have new mail in /var/spool/mail/root


搞定。

搞技术的真是折腾,前几天又拔了几根白发。

唉!


发布于:2017年8月22日 15:20

最新回复 (0)
返回
发新帖