【发布时间】:2014-12-24 23:52:22
【问题描述】:
ssh2_sftp_mkdir($sftp, '/home/site',0774);
我正在使用上述方法远程创建一个文件夹,但该文件夹不是具有权限774,而是设置为754,这意味着该组不可写入。
【问题讨论】:
标签: php linux file-permissions umask
ssh2_sftp_mkdir($sftp, '/home/site',0774);
我正在使用上述方法远程创建一个文件夹,但该文件夹不是具有权限774,而是设置为754,这意味着该组不可写入。
【问题讨论】:
标签: php linux file-permissions umask
模式也被当前的umask修改,你可以使用umask()来改变。
【讨论】:
发生的情况是 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 directories 或Arch 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);
【讨论】: