zoukankan      html  css  js  c++  java
  • 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安装扩展这一篇文章足矣。。。。
  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/GetLastError/p/7605133.html
Copyright © 2011-2022 走看看