You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:05:17