Flysystem v3使用Local适配器写入文件失败:路径异常求助
解决Flysystem Local适配器写入路径丢失开头斜杠的问题
问题核心在于Flysystem Local适配器的路径处理逻辑:它会将传入的写入路径视为相对于适配器根目录的相对路径,自动移除路径开头的斜杠。结合你的代码场景,有两种直接的修复方式:
方式一:调整适配器根目录到目标路径
将Local适配器的根目录直接设为你要写入的目录,写入时只需传入文件名或相对该目录的子路径:
// 适配器根目录设为目标文件所在的目录 $adapter = new LocalFilesystemAdapter('/var/www/html/public_html/files/'); $filesystem = new Filesystem($adapter); // 写入时直接传文件名即可 $filesystem->write($file_name, $file_content);
方式二:修改写入路径的格式
如果需要保留适配器根目录为/,那么写入时不要给路径加开头的斜杠,Flysystem会自动将路径与适配器根目录拼接成正确的绝对路径:
$adapter = new LocalFilesystemAdapter('/'); $filesystem = new Filesystem($adapter); // 去掉路径开头的斜杠 $filesystem->write('var/www/html/public_html/files/'.$file_name, $file_content);
额外注意事项
- 确保PHP进程对目标目录拥有写入权限,否则即使路径正确,也可能静默写入失败;
- 可以使用
$filesystem->has('目标路径')方法验证文件是否存在,辅助排查问题。
内容的提问来源于stack exchange,提问作者JCOGS Design
相关产品推荐
相关产品推荐

