Laravel文件系统sftp为新文件夹设置umask

时间:2018-10-09 12:21:34

标签: laravel filesystems sftp umask

是否可以为新创建的文件夹设置 umask

Storage::disk('sftp')->put('/path/to/folder/new/test.txt', $contents);

在我的情况下,使用的 umask 是744。是否可以为新创建的文件夹更改 umask

谢谢。

3 个答案:

答案 0 :(得分:0)

您可以使用此功能:

File::makeDirectory($path, $mode = 0777, true, true);

在您的情况下,只需将$ mode更改为0774即可:

Storage::disk('sftp')->makeDirectory($path, 0774);

文档:https://laravel.com/docs/5.1/filesystem#introduction

答案 1 :(得分:0)

就我而言,在directoryPerm的配置中为sftpAdapter设置所需的umask就足够了

答案 2 :(得分:0)

解决方案是使用配置中的 'directoryPerm' => 0755, 键值。配置:

'disks' => [
    'remote-sftp' => [
        'driver' => 'sftp',
        'host' => '222.222.222.222',
        'port' => 22,
        'username' => 'user',
        'password' => 'password',
        'visibility' => 'public', // set to public to use permPublic, or private to use permPrivate
        'permPublic' => 0755, // whatever you want the public permission is, avoid 0777
        'root' => '/path/to/web/directory',
        'timeout' => 30,
        'directoryPerm' => 0755, // whatever you want
    ],
],

在代码中,文件 League\Flysystem\Sftp\StfpAdapter 中的类 /private/var/www/megalobiz/vendor/league/flysystem-sftp/src/StfpAdapter,有两个重要的属性需要看清楚:

/**
 * @var array
 */
protected $configurable = ['host', 'hostFingerprint', 'port', 'username', 'password', 'useAgent', 'agent', 'timeout', 'root', 'privateKey', 'passphrase', 'permPrivate', 'permPublic', 'directoryPerm', 'NetSftpConnection'];

/**
 * @var int
 */
protected $directoryPerm = 0744;

$configurable 是上面配置文件系统 sftp 驱动程序的所有可能的键。您可以在配置文件中将 directoryPerm0744 更改为 0755

'directoryPerm' => 0755,

但是,因为 StfpAdapter https://github.com/thephpleague/flysystem-sftp/issues/81 中有一个类似的错误,它不会在 createDir 上使用 $config 参数:

$filesystem = Storage::disk('remote-sftp');
$filesystem->getDriver()->getAdapter()->setDirectoryPerm(0755);
$filesystem->put('dir1/dir2/'.$filename, $contents);

或者将其设置为 public :

$filesystem->put('dir1/dir2/'.$filename, $contents, 'public');