【问题标题】:PHP ssh2_sftp_mkdir creating permission incorrectlyPHP ssh2_sftp_mkdir 创建权限不正确
【发布时间】:2014-12-24 23:52:22
【问题描述】:
ssh2_sftp_mkdir($sftp, '/home/site',0774);

我正在使用上述方法远程创建一个文件夹,但该文件夹不是具有权限774,而是设置为754,这意味着该组不可写入。

【问题讨论】:

    标签: php linux file-permissions umask


    【解决方案1】:

    模式也被当前的umask修改,你可以使用umask()来改变。

    【讨论】:

    • 嗯,手册指出 ssh2_sftp_mkdir 函数类似于使用 mkdir() 和 ssh2.sftp:// 包装器,所以我认为它会。
    • 所以我试过 $old = umask(0); ssh2_sftp_mkdir($sftp, $folder,0775); umask($旧);最终获得 755 的权限
    • 它是否允许您稍后使用 ssh2_sftp_chmod 更改目录权限?
    【解决方案2】:

    发生的情况是 php 函数 ssh2_sftp_mkdir 由于某种原因受到系统 umask 设置的影响,问题是没有记录。

    例如,如果你这样做

    ssh2_sftp_mkdir($sftp, '/home/site',0774);
    

    并且您系统上的umask 设置为022(因为它是大多数Linux 发行版的默认设置),您最终将创建具有754 权限的目录site (drwxr-xr--)

    可以通过使用函数 umask 从 php 更改 umask,但如文档中所述,不建议这样做,因为在多线程网络服务器中可能会出现意外行为。

    要了解umask 是什么以及它在Debian Linux 中的工作原理,请参阅Debian Wiki - Permissions - The defaults for new files and directoriesArch Linux Wiki - Umask

    我对处理这种情况的建议是在创建目录/文件时尽最大努力设置权限,创建后,请确保使用ssh2_sftp_chmod函数设置适当的权限

    在这种情况下,那就是

    /* Create directory */
    ssh2_sftp_mkdir($sftp, '/home/site',0774);
    
    /* Make sure proper permissions are set */
    ssh2_sftp_chmod($sftp, '/home/site',0774);
    

    【讨论】:

      猜你喜欢
      • 2011-10-01
      • 2015-07-05
      • 2014-10-23
      • 2017-07-10
      • 2015-12-31
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 2011-04-08
      相关资源
      最近更新 更多