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

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

4

2 回答 2

0

该模式也由当前的 umask 修改,您可以使用 umask() 更改它。

于 2014-10-29T10:15:21.290 回答
0

发生的事情是 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 directoryArch Linux Wiki - Umask

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

在这种情况下,那将是

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

/* Make sure proper permissions are set */
ssh2_sftp_chmod($sftp, '/home/site',0774);
于 2020-01-17T10:04:53.890 回答