Mac OS Sierra 安裝PHP擴展 Operation not permitted


想看詳細解讀的可以 點這里  只需要解決問題直接往下看就好

---------------------------------------------------分 割 線-------------------------------------------------------

Mac OS Sierra 安裝PHP擴展,在make install 的時候,出現類似

cp: /usr/lib/php/extensions/no-debug-non-zts-20131226/#INST@12567#: Operation not permitted
make: *** [install-modules] Error 1

的錯誤,是因為是OSX 10.11 El Capitan開始,新添加了一個新的安全機制叫系統完整性保護System Integrity Protection (SIP),所以對於目錄
/System
/sbin
/usr
不包含(/usr/local/)
僅僅供系統使用,其它用戶或者程序無法直接使用,而我們的/usr/lib/php/extensions/剛好在受保護范圍內。

解決辦法是

禁掉SIP保護機制:

  1. 重啟系統
  2. 按住Command + R   (重新亮屏之后就開始按,象征地按幾秒再松開,出現蘋果標志,ok)
  3. 菜單“實用工具” ==>> “終端” ==>> 輸入csrutil disable;執行后會輸出:Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.
  4. 重啟系統

禁止掉SIP后,就可以順利的安裝了,當然裝完了以后記得重新打開SIP,方法同上,只是命令是csrutil enable。

 

另附Mac OS 給PHP安裝Redis擴展流程:

curl -O https://nodeload.github.com/nicolasff/phpredis/zip/master  
tar -zxf master  
cd phpredis-master/  
phpize  
./configure (./configure -with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config  注意這個 可以指定自己要安裝的路徑,什么都不加是系統默認路徑,比如這個就是給我安裝在本機上的xampp的路徑裝) 
make  
sudo make install  
# 提示 /usr/lib/php/extensions/no-debug-non-zts-xxxxxxxxx/ 表示成功  
vim /etc/php.ini    (如果沒有,那就復制一份/etc/php.ini.default之類的並重命名)  
# 添加下面這句話,告訴PHP要啟用Redis擴展,保存文件  
extension=redis.so  
#重啟apache  
sudo apachectl restart  
#查看擴展安裝情況,出現 redis 表示安裝成功。或者看phpinfo()  
php -m |grep redis 

另外,如果安裝了多個redis,要確定你是否開啟了正確路徑下的Redis 可以指定路徑開啟Redis
eg:
/Applications/XAMPP/xamppfiles/etc/redis-4.0.2/src/redis-server
/Applications/XAMPP/xamppfiles/etc/redis-4.0.2/src/redis-cli
php.ini里面不知是不是指定擴展路徑比較好
eg:
extension=/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/redis.so

再另外,貌似redis版本和擴展版本是有對應關系的,但是在網上貌似沒有看到類似的說法,比如:
我用xampp的時候 安裝了4.0.2版本的Redis,並且試圖給他添加phpredis-master擴展 但是安裝后,發現phpinfo中還是沒有Redis。有兩種可能的原因
1、phpredis-master擴展與Redis4.0.2版本不對版
2、在執行./configure時需要指定系統版本和要安裝的正確的路徑
后來我下載了git clone https://github.com/phpredis/phpredis.git這個版本的擴展,並且在./configure的時候用了這個 就好使了。
sudo MACOSX_DEPLOYMENT_TARGET=10.13.1 CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch i386 -arch x86_64 -bind_at_load" ./configure --enable-redis --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config
放個鏈接

 

另外:我出現過一個比較蹩腳的問題:

php -m |grep redis 查看確實安裝了Redis擴展,但 phpinfo 中卻沒有,當然啟動項目也是不支持Redis的(tp3.2),以上流程檢查了好幾遍搞了好久都不行,后來
php -i 發現終端中查看的PHP安裝路徑和我修改的php.ini路徑根本就不同,所以說 Apache 啟用的根本就不是我安裝了擴展的 php ,而是我系統中安裝的另一個php。
說來這個問題也怪自己,系統自帶一個php,用homebrew安裝了兩個版本php,通過命令行直接有安裝了一個php,不亂套才怪,后來刪除了 homebrew安裝的PHP,使用了系統自帶的,
再次進行以上操作,問題解決。
推薦一個切換PHP版本的:macOS Sierra上安裝Apache和多個版本的PHP切換 講得很全面了。



----------------------------------------------------------分割線-----------------------------------------------------------------
基本上給PHP手動安裝拓展的流程都是如上,只是安裝不同的拓展包罷了,比如說mango。
但是再安裝mango擴展的時候,在make&&make stall的時候 報了一個錯:fatal error: 'openssl/evp.h' file not found
出現這種錯誤有兩種解決辦法:
1、重新安裝一遍openssl,並記住其安裝目錄,然后在./configure的時候
./configure --with-openssl-dir="/usr/local/opt/openssl"(""中替換成自己的openssl安裝目錄)
2、find -name openssl 找到所有你安裝過openssl的目錄 然后將1中""將你搜索出來的openssl安裝目錄一個個放進去試,當找到對的安裝目錄的時候,就可以繼續下去了。
產生這種問題的原因就是 在安裝過程中它只會在你的當前目錄中去尋找evp.h文件,如果找不到,他就不找了直接報錯,其實感覺挺坑爹的。。。
另附 MongoDB PHP 安裝擴展


還有就是重申一遍,蘋果新加的安全機制/usr下的那個extension文件夾是受系統保護的,連root都沒有寫權限,會報錯
cp: /usr/lib/php/extensions/no-debug-non-zts-20131226/#INST@12567#: Operation not permitted
make: *** [install-modules] Error 1

在csrutil disable后,成功安裝完擴展之后要記得回去csrutil enable回來,不要破壞其安全機制!

感覺基本上PHP安裝擴展這一篇文章足矣。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM