Laravel Storage调用allFiles返回空数组问题求助
Laravel FTP磁盘
allFiles()返回空数组的解决思路 针对你遇到的Laravel对接Windows FTP服务器时,put方法正常但allFiles()始终返回空数组的问题,可尝试以下排查方向:
调整FTP列表指令
Windows FTP服务器(如IIS FTP)返回的LIST指令格式和类Unix服务器差异较大,Flysystem底层可能无法正确解析文件列表。可在磁盘配置中指定更兼容的列表指令:'ftp_customer' => [ 'driver' => 'ftp', 'host' => 'xxx.xxx.xx.x', 'username' => 'xxx', 'password' => 'xxx', 'port' => 21, 'passive' => true, 'root' => '/', 'list' => 'NLST', // 仅返回文件名的简单列表指令 // 也可尝试 'list' => 'LIST -la' 适配部分Windows服务器格式 ],验证根路径配置
Windows FTP的虚拟根路径可能和预期不一致,尝试去掉root配置(让Laravel使用FTP默认根目录),或者将root设为空字符串'',避免路径解析错误导致无法遍历文件。检查被动模式端口范围
虽然put操作成功,但文件列表操作可能需要完整的被动端口连接支持。确认Windows FTP服务器已配置并开放被动模式端口范围,同时可在Laravel配置中指定对应范围:'ftp_customer' => [ // ... 其他配置 'passive_port_range' => [60000, 65535], // 需和服务器设置的范围一致 ],手动验证FTP指令返回格式
使用FileZilla等FTP客户端连接服务器,手动执行LIST和NLST指令,观察返回的内容格式。如果LIST返回的是Windows风格的日期(如12-20-23 01:43PM 8 file1.txt),说明默认解析逻辑不兼容,优先使用NLST指令。尝试切换到SFTP驱动
如果客户服务器支持SFTP协议,改用Laravel的sftp驱动可避免Windows FTP的兼容性问题,配置示例:'sftp_customer' => [ 'driver' => 'sftp', 'host' => 'xxx.xxx.xx.x', 'username' => 'xxx', 'password' => 'xxx', 'port' => 22, 'root' => '/', ],
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

