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

PHP中ftp_nlist始终返回false,但可下载目录文件的问题排查

可能的原因及解决方案

1. 路径参数错误(你的代码中最可能的问题)

你已经通过ftp_chdir($conn_id, $remote_dir)切换到了test/目录,之后调用ftp_nlist($conn_id, $remote_dir)相当于在当前目录(test/)下查找test/子目录,而该子目录大概率不存在,因此返回false。

修改方式:调用ftp_nlist时传入空字符串或.,表示当前目录:

$files = ftp_nlist($conn_id, '');
// 或者
$files = ftp_nlist($conn_id, '.');

2. FTP服务器权限限制

即使能下载文件,也可能没有目录列表权限。部分FTP服务器会给用户分配文件下载权限,但限制其查看目录内容,这种情况需要联系服务器管理员确认权限设置。

3. 服务器不支持NLST命令

ftp_nlist依赖FTP的NLST命令,如果服务器禁用或不支持该命令,函数会返回false。可以尝试用ftp_rawlist替代,它使用兼容性更好的LIST命令:

$files = ftp_rawlist($conn_id, '');
if ($files !== false) {
    // 解析ftp_rawlist结果提取文件名
    $file_names = [];
    foreach ($files as $line) {
        preg_match('/^\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(.*)$/', $line, $matches);
        if (!empty($matches[1])) {
            $file_names[] = $matches[1];
        }
    }
    $files = $file_names;
}

4. 被动模式配置问题

虽然你开启了被动模式,但部分服务器对被动模式的端口范围有限制,或本地网络防火墙阻止了被动模式的数据连接。可以尝试:

  • 确认服务器的被动模式端口范围是否开放
  • 临时关闭本地防火墙测试
  • 切换到主动模式(ftp_pasv($conn_id, false))尝试(注:主动模式在NAT环境下大概率无法工作)

5. PHP FTP扩展问题

部分PHP版本的FTP扩展存在bug,导致ftp_nlist异常。可以尝试升级PHP到稳定版本,或检查php.ini中是否禁用了相关函数(概率较低,因为你能正常使用其他FTP函数)。


内容的提问来源于stack exchange,提问作者glenn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:16:10