PHP ssh2_sftp_mkdir创建权限不正确


PHP ssh2_sftp_mkdir creating permission incorrectly

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);