• 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安装扩展这一篇文章足矣。。。。
  • 相关阅读:
    [转]Android Uri Intent 用法汇总
    [书目20120607]编写高质量代码:改善C#程序的157个建议
    [转]Android多媒体:实现图像的编辑和合成
    [转]Android IPC进程通信——Messager方式
    [转]Android中程序与Service交互的方式——交互方式
    [书目20120605]人力资源管理 余凯成
    [转]SurfaceView horizontal scrolling
    住房乃生活所需
    [转]android service 学习(上) 音乐播放
    [转]Android实现获取本机中所有图片
  • 原文地址:https://www.cnblogs.com/GetLastError/p/7605133.html
Copyright © 2020-2023  润新知