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