mac操做系统升级到10.11.2(OS X EI Capitan)后,系统自带的php也被修改覆盖了;以前安装的php扩展全没法继续使用了;而mcrypt扩展急需使用,但是怎么安装都没法安装成功;困扰了很久。编译后执行安装时老是提示php

1
[cp: /usr/lib/php/extensions/no-debug-non-zts-20121212/#INST@17000#: Operation not permitted]

终于找到了问题所在apache

什么鬼

当你进入/usr/lib/php/extensions/目录时你会发现目录根本没法操做(手动拷贝、移动),使用root在终端也没有权限;但是不可能啊?我已是root用户了,为何还不容许;原来是OSX 10.11 El Capitan新添加了一个新的安全机制叫系统完整性保护System Integrity Protection (SIP),因此对于目录api

  • /System
  • /sbin
  • /usr
  • 不包含(/usr/local/)

仅仅供系统使用,其它用户或者程序没法直接使用,而咱们的/usr/lib/php/extensions/恰好在受保护范围内安全

禁SIP

因此解决方法就是禁掉SIP保护机制,步骤是:markdown

  • 重启系统
  • 按住Command + R
  • 菜单“实用工具” ==>> “终端” ==>> 输入csrutil disable;执行后会输出:Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.
  • 再次重启系统

禁止掉SIP后,就能够顺利的安装了,固然装完了之后你能够从新打开SIP,方法同上,只是命令是csrutil enablecurl

完整安装

1
cd ~ ; mkdir mcrypt ; cd mcrypt

分别下载
libmcrypt2.5.8你系统的php版本到mcrypt目录工具

解压post

1
tar -zxvf libmcrypt-2.5.8.tar.gz
tar -zxvf php-5.5.27.tar.gz
rm *.gz

安装libmcrypturl

1
cd libmcrypt-2.5.8
./configure
make
sudo make install

安装autoconfspa

1
cd ~/mcrypt
curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar xvfz autoconf-latest.tar.gz
cd autoconf-2.69/
./configure
make
sudo make install

编译mcrypt的php扩展

1
cd ../php-5.5.27/ext/mcrypt/
/usr/bin/phpize

上面会输出:

1
Configuring for:
PHP Api Version: 20121113
Zend Module Api No: 20121212
Zend Extension Api No: 220121212

接着编译:

1
./configure
make
sudo make install

上面会输出:

1
Installing shared extensions:  /usr/lib/php/extensions/no-debug-non-zts-20121212/

若是出现错误(我遇到的):

1
cp: /usr/lib/php/extensions/no-debug-non-zts-20121212/#INST@17000#: Operation not permitted

就说明你须要先禁掉SIP(如何禁掉SIP见上面)

修改/etc/php.ini,增长扩展extension=mcrypt.so

再重启apache

1
sudo apachectl restart

再看你的phpinfo();就会出现mcrypt信息了;

(个人博客原文:http://www.jmolboy.com/2015/12/01/mcrypt-extension-on-EI-Capitan/)