PHP 的 GRPC 扩展的安装修复
php 的 grpc 扩展在八月十八日已经到了 1.0.0 stable
。很高兴的,终于到了一个 stable 版本。这意味着,在 php 中将 grpc 应用到生产环境会安心许多。一些不太稳定的特性或功能,会被排除在发布版本之外,用起来顺很多。
可惜的是,这个 stable
版本貌似在安装环节并不稳定,安装过程中分别会在 configure
和 make
环节报如下的警告与错误。
在 configure
环节的警告:
...
checking whether to enable grpc support... yes, shared
./configure: line 4107: cd: ../../grpc: No such file or directory
./configure: line 4138: cd: ../../grpc/src/php/ext: No such file or directory
./configure: line 4169: cd: ../../grpc/third_party/boringssl: No such file or directory
checking for ld used by cc... /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
...
在 make
环节就直接报错退出:
...
In file included from /Volumes/RamDisk/grpc-1.0.0/src/core/lib/security/credentials/google_default/google_default_credentials.c:46:
In file included from ./src/core/lib/security/credentials/jwt/jwt_credentials.h:38:
./src/core/lib/security/credentials/jwt/json_token.h:38:10: fatal error: 'openssl/rsa.h' file not found
#include <openssl/rsa.h>
^
1 error generated.
make: *** [src/core/lib/security/credentials/google_default/google_default_credentials.lo] Error 1
修正的方法也简单。用下面的步骤安装即可:
1. 下载,解压
wget https://pecl.php.net/get/grpc-1.0.0.tgz
tar zxf grpc-1.0.0.tgz
cd grpc-1.0.0
2. 修正 m4 文件
在第 8-10 行,原本是这样的,删除它们,
PHP_ADD_INCLUDE(../../grpc/include)
PHP_ADD_INCLUDE(../../grpc/src/php/ext/grpc)
PHP_ADD_INCLUDE(../../grpc/third_party/boringssl/include)
然后替换成下面这一行。
PHP_ADD_INCLUDE(third_party/boringssl/include)
缩进最好严格按照文件本身的格式来,新增的一行使用两个空格缩进。
3. 编译、安装,配置
phpize
./configure --with-php-config=<the_path_to_your_php-config_binary>
make
make install
然后修改 php.ini
,新增一行
extension=grpc.so
4. 搞定
PS:第二步本来想用脚本来完成的,烦人的是 MacOS 下面的 sed
命令和 Linux 下面的用法不太一样,做兼容很麻烦,索性算了,大家手动改吧。
再 PS:截至 2016-08-31。我已经把这个问题已经提交了 issue,开发组也已经 assign 到具体的开发者跟进,相信不久就会发布新版解决这个问题。1.0.0 版除了安装过程有些小问题,使用上是 OK 的。