php 的 grpc 扩展在八月十八日已经到了 1.0.0 stable。很高兴的,终于到了一个 stable 版本。这意味着,在 php 中将 grpc 应用到生产环境会安心许多。一些不太稳定的特性或功能,会被排除在发布版本之外,用起来顺很多。

可惜的是,这个 stable 版本貌似在安装环节并不稳定,安装过程中分别会在 configuremake 环节报如下的警告与错误。

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 的。