从Flysystem SFTP v1升级到v3:如何配置权限匹配原directoryPerm
问题解答
完全可以把PortableVisibilityConverter里dir下的private和public都设为0755,这样就能完美匹配你之前v1版本中directoryPerm = 0755的效果。
原因很简单:v1版本的SftpAdapter里的directoryPerm是全局设置所有目录的权限,不管这个目录被标记为“公开”还是“私有”,统一应用0755。而v3的PortableVisibilityConverter是通过区分文件/目录的可见性(public/private)来对应不同权限,所以只要把两种可见性对应的目录权限都设为0755,就和原来的逻辑完全一致了。
给你一个具体的配置示例:
use League\Flysystem\Visibility; use League\Flysystem\UnixVisibility\PortableVisibilityConverter; $visibilityConverter = new PortableVisibilityConverter( // 文件私有权限(无需修改可保持默认,仅作示例) filePrivate: 0644, // 文件公开权限(同理) filePublic: 0644, // 目录私有权限设为0755 dirPrivate: 0755, // 目录公开权限也设为0755 dirPublic: 0755, // 默认目录可见性(可选,因权限一致设为私有/公开均可) defaultForDirectories: Visibility::PRIVATE ); // 将转换器传入SFTP文件系统配置 $filesystem = new League\Flysystem\Filesystem( new League\Flysystem\PhpseclibV3\SftpAdapter([ // 你的SFTP连接配置 'host' => 'your-sftp-host', 'username' => 'your-username', 'password' => 'your-password', // 其他必要配置... ]), ['visibility' => $visibilityConverter] );
这样配置后,所有新建目录都会应用0755权限(所有者读/写/执行,组及其他用户读/执行),和你之前v1版本的权限行为完全一致,不会出现权限不匹配的问题。
内容的提问来源于stack exchange,提问作者Dimitrios Desyllas
相关产品推荐
相关产品推荐

