mac操作系統升級到10.11.2(OS X EI Capitan)后,系統自帶的php也被修改覆蓋了;之前安裝的php擴展全無法繼續使用了;而mcrypt擴展急需使用,可是怎么安裝都無法安裝成功;困擾了好久。編譯后執行安裝時總是提示
1 | [cp: /usr/lib/php/extensions/no-debug-non-zts-20121212/#INST@17000#: Operation not permitted] |
終于找到了問題所在
什么鬼
當你進入/usr/lib/php/extensions/目錄時你會發現目錄根本無法操作(手動拷貝、移動),使用root在終端也沒有權限;可是不可能啊?我已經是root用戶了,為什么還不允許;原來是OSX 10.11 El Capitan新添加了一個新的安全機制叫系統完整性保護System Integrity PRotection (Sip),所以對于目錄
- /System
- /sbin
- /usr
- 不包含(/usr/local/)
僅僅供系統使用,其它用戶或者程序無法直接使用,而我們的/usr/lib/php/extensions/剛好在受保護范圍內
禁SIP
所以解決方法就是禁掉SIP保護機制,步驟是:
- 重啟系統
- 按住Command + R
- 菜單“實用工具” ==>> “終端” ==>> 輸入csrutil disable;執行后會輸出:Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.
- 再次重啟系統
禁止掉SIP后,就可以順利的安裝了,當然裝完了以后你可以重新打開SIP,方法同上,只是命令是csrutil enable
完整安裝
1 | cd ~ ; mkdir mcrypt ; cd mcrypt |
分別下載
libmcrypt2.5.8、你系統的php版本到mcrypt目錄
解壓
1 | tar -zxvf libmcrypt-2.5.8.tar.gztar -zxvf php-5.5.27.tar.gzrm *.gz |
安裝libmcrypt
1 | cd libmcrypt-2.5.8./configuremakesudo make install |
安裝autoconf
1 | cd ~/mcryptcurl -O http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gztar xvfz autoconf-latest.tar.gzcd autoconf-2.69/./configuremakesudo make install |
編譯mcrypt的php擴展
1 | cd ../php-5.5.27/ext/mcrypt//usr/bin/phpize |
上面會輸出:
1 | Configuring for:PHP Api Version: 20121113Zend Module Api No: 20121212Zend Extension Api No: 220121212 |
接著編譯:
1 | ./configuremakesudo 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/)



















