我们在mac上做php开发时,需要自己去编译一些php扩展,通常的步骤可能如下:
在make阶段我们很有可能会碰到以下错误:
grep: /usr/include/php/main/php.h: No such file or directory
grep: /usr/include/php/Zend/zend_modules.h: No such file or directory
grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
出现上面错误的原因是因为,mac下编译所用到的一些头文件并不在/usr/include下,而是存在于路径:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/php,这时我们处理此问题的方法有2种:
创建软连(需要自行处理权限问题)
xcode-select --install(安装xcode command line tools)
完成上面步骤后,再make,发现可以正常编译。
然后make install,发现又有新的错误:
/usr/lib/php/extensions/no-debug-non-zts-20121212/#INST@870#: Permi-sion denied
然后我们尝试手动复制编译好的扩展xxyy.so到/usr/lib/php/extensions/no-debug-non-zts-20121212目录下,还是会提示权限不足,即使sudo成root操作也没有用。导致此问题的原因是新版本到MAC OS新添加了一个新的安全机制叫系统完整性保护,对于以下目录安全性保护,仅能对系统使用。因此我们在这些目录中就无法做创建、删除、编辑等操作,这些目录包含:
/System
/sbin
/usr
我们所要安装的php扩展刚好包含在这些目录下,因此就有了上面的“Permi-sion denied”错误,好在mac提供了关闭内核保护机制,方法如下:
重启mac
重启过程中按 command+r
重启后在出现到界面选择:“使用工具”->“菜单”->“终端”
在“终端”中输入“csrutil disable”
重启系统(“终端”内操作):reboot
完成以上步骤后再cp xxyy.so
扩展安装完成后,我们恢复内核保护,还是之行上面步骤,把步骤4到命令换成“csrutil enable”即可
领取专属 10元无门槛券
私享最新 技术干货