mac安装php扩展报错问题分析
背景
- 机器:mac os catalina
- 版本: 10.15.2
- PHP: 7.3.9( 系统默认安装)
php的一个项目依赖mongodb扩展, composer update
的提示,提示需要通过pecl安装mongodb扩展, 通过pecl安装扩展时,提示 找不到PHP头文件错误, 如下报错。
1 |
|
最终顺利解决,这里记录下问题分析
问题分析
中文资料非常少,并且内容过时, 大部分是针对 版本10.14
, 10.13
版本下的解决方案:
1 |
|
对于我们的10.15
版本并不适用。
有的是直接修改phpize,这里改变了系统的phpize,不可取(https://bbqsoftwares.com/blog/xdebug-catalina-issue)
这里找到一篇思路清晰的解决方案针对xdebug,适用于所以需要编译的pecl扩展。把这篇文章翻译过来, 做记录。
怎么在MacOS 10.15 Catalina上安装xdebug
在 macOS Catalina上当你尝试构建xdebug时, 会报如下错误:
1 |
|
1 |
|
1 |
|
1 |
|
在macOS Catalina上配置,构建xdebug
上述错误的原因主要是 在macos上发布最新的xcode11
时,把目录/usr/include
给去掉了。
我们可以绕过这个问题,继续编译xdebug
首先, 我们需要确认 Xcode
和命令行工具(command line tools) 已经正确安装,打开命令行终端,运行以下命令,打印sdk路径
1 |
|
理论上会输出
1 |
|
如果输出跟上面不吻合,在命令行执行以下命令
1 |
|
等安装完毕,打开xcode,确保正确安装,重新打印sdk路径
1 |
|
编译PHP扩展需要被删除的 include
目录, 因此我们可以对phpize
和php-config
程序进行修改,使其能使用 mac os sdk的include目录。 我们首先复制出一份 phpize
和php-config
, 我们通过打补丁(patch)的方式,去修改这个复制品,(主要不影响原有功能 )
在我们个人目录新建 php-private
1 |
|
复制程序phpize
和php-config
到 php-private
目录。
1 |
|
查看PHP版本
1 |
|
可能会有以下输出
1 |
|
我已经提前做好程序的补丁,将这两个文件下载下来。
下载phpize
补丁,补丁详细内容如下:
1 |
|
对 php 7.3.9,下载 php-config
补丁
对于7.3.11, 下载补丁
php-confg的补丁如下
1 |
|
解压压缩包
PHP 7.3.9
1 |
|
PHP 7.3.11
1 |
|
现在我们对我们的副本 phpize
和php-config
打补丁
PHP 7.3.9
1 |
|
PHP 7.3.11
1 |
|
到这里,我们已经把编译xdebug的前期工作准备就绪。
在home
目录,常见xdebug的build文件夹
1 |
|
从Xdebug官网下载xdebug到 ~/Downloads
1 |
|
现在我们在xdebug目录运行我们补丁版的phpize
1 |
|
输出内容,一切正常。
1 |
|
执行过程中,如果没有其他报错, 你可以跳过下面张杰,直接进入到 配置安装xdebug
章节
再执行过程中, 你可能遇到以下错误,提示你需要安装一些程序
1 |
|
如果 phpize 输出以下内容, 就代表我们需要安装autoconf
1 |
|
执行以下命令,对autoconf就行安装
1 |
|
重新在xdebug文件夹运行补丁 phpize
1 |
|
重新查看输出, 如果一切正常, 我们继续安装流程
1 |
|
配置,build xdebug程序
我们可以看下补丁php-config
的绝对路径
1 |
|
输出如下:
1 |
|
将上述路径 配置到以下命令中
1 |
|
命令输出结果,你会发现 sdk path已经被正确使用了
1 |
|
现在,我们可以build扩展
1 |
|
我们不能 macos系统上 直接进行 make install
操作来安装xdebug.so, 主要是因为 macos sip保护系统不允许我们把 xdebug安装到 /usr/lib/extensions
目录, 因此我们把扩展安装到 /usr/local
目录
1 |
|
现在我们去编译 php.ini
(一般会在/etc/php.ini) 去加载我们打包好的xdebug, PHP扩展默认去专门的扩展目录搜寻需要安装的扩展, 因为我们的xdebug在该目录外面, 因此我们需要指定绝对路径。
1 |
|
我们做个简单测试, 执行
1 |
|
预期输出状态:
1 |
|
然后我们重新apache -web服务, 使我们的修改生效
1 |
|
参考文章
- https://profilingviewer.com/installing-xdebug-on-catalina.html
- https://stackoverflow.com/questions/52592548/unable-to-use-phpize-after-update-to-macos-mojave
- patch命令
- https://bbqsoftwares.com/blog/xdebug-catalina-issue
其他收获
- 学习了
diff
patch
命令