使用源码编译安装PHP扩展

近日 由于 brew 将 tap homebrew-php 废弃 已经无法使用 brew install php70-xxx 来安装扩展,因此不得不使用下载源码编译的形式来安装

第一步 下载源码 php 所有扩展源码都可以在 pecl.php.net 上找到
以安装 redis 扩展为例
wget https://pecl.php.net/get/redis-4.0.1.tgz

第二步 解压源码压缩包
tar -zxvf redis-4.0.1.tgz
解压后进入源码目录 cd redis-4.0.1

第三步 执行 phpize
(phpize 命令是用来准备 PHP 扩展库的编译环境的)

然后执行 ./configure
这里如果想要将扩展安装到目录有个参数非常重要
--with-php-config=/usr/local/opt/php@7.1/bin/php-config
php-config 中记录着 php.ini 中的相关配置 其中有个 extension-dir 的配置指定了 PHP 的扩展目录 这样扩展编译后将会安装到这个目录下 这样安装的扩展在 php.ini 中就只需要这样配置 extension=redis.so

第四步 执行 ./configure --with-php-config=/usr/local/opt/php@7.1/bin/php-config

第五步 执行 make 开始编译
第六步 执行 make install 正常会将 redis.so 安装到 php.ini 中配置的 extension-dir (如果 第四步有指定 php-config 的话)

在 php.ini 配置中开启 配置
extension=redis.so
如果没有的话需要自己填写

最后记得重启 php 进程

编译安装中遇到的问题

在安装 mongodb 扩展 执行 make 时 出现一个错误 “'openssl/sha.h' file not found” 显示 openssl 的一个库文件没找到
在确认过本机安装过 openssl 之后根据网上搜索到的解决方案 在 /usr/local/include 建立软连接 -> /usr/local/opt/openssl@1.1/include/openssl/sha.h 错误消失但是发生了其他的错误 编译还依赖openssl 的其他库文件
于是我一时火气直接把 /usr/local/opt/openssl@/include/openssl 这个目录整个复制到了mongodb源码文件下的 include 目录下
当时执行的 cp -R /usr/local/opt/openssl@/include/openssl ~/java/mongodb-1.4.2/include
结果你猜怎么样? 编译通过了 !GoGoGo~~
但是安装后发现并不能正常使用

xdebug 安装后出现错误警告 PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0
解决办法 xdebug 是 Zend 扩展 在php.ini 中开启需要使用 zend_extension=xdebug.so 而不是 extension=xdebug.so

你可能感兴趣的