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/)