最近,在Mac下安装PHP扩展,遇到一些问题记录一下。本人安装的是mongodb扩展,对于该扩展直接去PECL下载并解压就好了,其他扩展类似,就不再这里展开了。主要说一下,编译的时候遇到的问题。
问题记录:
- 1)./configure的时候 could not find php.h
- 2) Operation not permitted
- 3) ln: /usr/include: Read-only file system
问题说明:
其实以上问题主要是由于MacOs SIP(System integrity Protection - 系统完整性保护)导致的,以及使用的系统自带的PHP的incloude目录引发的一些问题。网上都给出了答案,但是都很零碎,我是完整的踩完这些坑,就简单记录一下。
第一、关闭SIP保护(问题2)
# 查看状态
$ csrutil status
System Integrity Protection status: disabled.
# 重启电脑,长按command+R开机启动,进入实时工具的命令行界面输入
$ csrutil disable
# 再次重启查看状态
# 最后可以在进行如上步骤开始保护
$ csrutil enable
第二、正常./configure的时候会出现问题1,解决办法如下:
- 找到SDK工作目录
$ xcrun --show-sdk-path
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php
- 创建软连接
ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include /usr/include
第三、注意:此时会出现问题3( ln: /usr/include: Read-only file system)
最开始,我也按照问题去找答案,最后发现这并不能解决问题,更容易让自己陷入找不到出路的地步。此时的问题就是上面说的,系统自带的PHP的incloud目录的问题,具体原因网上都能找到,这里说一下解决思路。
- 把phpize和php-config拷贝到工作目录
sudo cp /usr/bin/phpize ./
sudo cp /usr/bin/php-config ./
- 修改phpize和php-config两个文件中的incloudedir为找到的SDK中的PHP目录,根据自己的实际目录为准。使用vim编辑就行
- phpize
includedir="/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php"
- php-config
include_dir="/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php"
- 后面就是正常的执行编译命令了
sudo ./phpize
sudo ./configure --with-php-config=/usr/locle/php-config
注意: 这里需要带上你拷贝之后的php-config路径
sudo make
这里之后,mongodb.so 已经产生在modules目录下了。
sudo make install
- 拷贝mongodb.so到/usr/local/php/extensions下
- 修改php.ini,并添加extension=/usr/local/php/extensions/swoole.so
- 重启PHP-FPM
- 查看扩展 php -m
到此搞定!仅此记录个人的踏坑之路,如有不对之处,望海涵!