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 从 php 更改umask
,但如文档中所述,不建议这样做,因为多线程 Web 服务器中存在意外行为的可能性。
要了解什么是umask
以及它是如何工作的,例如在 Debian Linux 中,请参考 Debian Wiki - 权限 - 新文件和目录的默认值,或 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);