ssh2_sftp_mkdir($sftp, '/home/site',0774);
我正在使用上面的方法远程创建一个文件夹,但是该文件夹没有774
被设置为具有权限的文件夹,这754
意味着该组不可写。
ssh2_sftp_mkdir($sftp, '/home/site',0774);
我正在使用上面的方法远程创建一个文件夹,但是该文件夹没有774
被设置为具有权限的文件夹,这754
意味着该组不可写。
该模式也由当前的 umask 修改,您可以使用 umask() 更改它。
发生的事情是 php 函数ssh2_sftp_mkdir
由于某种原因受到系统umask
设置的影响,问题是这没有记录。
例如,如果你这样做
ssh2_sftp_mkdir($sftp, '/home/site',0774);
并且umask
在您的系统上设置为022
(因为它是大多数 Linux 发行版的默认设置),您最终将创建site
具有权限的目录754
( drwxr-xr--
)
umask
可以使用函数umask从 php进行更改,但如文档中所述,不建议这样做,因为在多线程 Web 服务器中可能会出现意外行为。
要了解它是什么umask
以及它是如何在 Debian Linux 中工作的,请参阅Debian Wiki - Permissions - The defaults for new files and directory或Arch Linux Wiki - Umask。
我对处理这种情况的建议是在创建目录/文件时尽最大努力设置权限,并在创建后确保使用ssh2_sftp_chmod
function设置适当的权限。
在这种情况下,那将是
/* Create directory */
ssh2_sftp_mkdir($sftp, '/home/site',0774);
/* Make sure proper permissions are set */
ssh2_sftp_chmod($sftp, '/home/site',0774);