利用本地的Mac的php5.6来安装php扩展,发现其实安不上。
无论怎么修改php.ini中的配置,都会提示”xxx.so文件不在/usr/xxx/xx/xx(扩展目录)中”,加了sudo,或者以管理员方式修改都不可以。
这是怎么回事呢?该如何修改呢?
事实上, 这是由Mac 10.11新增的Rootless引起的。那么什么是 Rootless 呢? 简单的来说, Rootless 机制限制了 Root 账户的权限, 使其没有了对系统的完全控制权。
收到影响的有以下几点:
- 禁止直接对
/System
,/bin
,/sbin
,/usr
目录的修改(/usr/local
目录除外). 只有通过苹果开发者认证的 app 才有权限对其修改。 - 禁止注入系统进程. 某些需要注入系统进程(finder, messages 等等系统级别的进程)的程序, debugger 无法使用了。
- 禁止加载内核扩展(kexts), 除非它们被苹果开发者正确的签名。
这些修改最明显的好处就是: 恶意 app 无法通过用户授权的方式从而获得所有系统权限了。
当然, 它带来的副作用也是巨大的, 一些合法的 app 也无法获得系统权限了. 比如: Homebrew, CocoaPods 以及所有需要在 /usr/bin 目录下有可执行权限的 app。
解决策略
利用homebrew 安装php5.6,然后修改环境变量,让homebrew下载的php5.6作为系统默认的php版本,然后再下扩展。
- homebrew 安装php5.6
- 修改环境变量,将homebrew安装的php5.6的路径写到前面Mac自带php的前面。
export PATH=XXXXX:$PATH
(ps:具体什么路径homebrew安装运行结束的时候会有提示的) - 以homebrew 安装的php为默认php来安装扩展。