【问题标题】:PHP ftp_nlist is not workingPHP ftp_nlist 不工作
【发布时间】:2025-12-15 23:45:01
【问题描述】:
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");

if (@ftp_login($ftp_conn, $ftp_username, $ftp_userpass))
{
    $path = "./";
    $path1="./test";
    $file = "test.txt";
    $file_list = ftp_nlist($ftp_conn,$path);
}
// close connection
ftp_close($ftp_conn);

以上是我正在使用的代码。它在我的 Windows 本地机器、Windows 服务器机器、Linux 本地机器上运行良好,但不知何故它在 Linux 服务器机器上失败了。 ftp_nlist 返回false。谁能告诉我可能是什么原因?

任何帮助表示赞赏。谢谢。

【问题讨论】:

  • 首先删除所有@(抑制)运算符,在脚本顶部添加 ini_set('display_errors', true) 和 error_reporting(E_ALL)。如果你想要一个健壮的脚本,任何异常都应该尝试/捕获。

标签: php linux ubuntu ftp


【解决方案1】:

ftp_nlist(或任何其他传输命令,如ftp_getftp_putftp_rawlist)出现问题的最典型原因是 PHP 默认为 FTP 活动模式。在 99% 的情况下,必须切换到 FTP 被动模式才能使传输正常工作。使用ftp_pasv function

$connect = ftp_connect($ftp) or die("Unable to connect to host");
ftp_login($connect, $username, $pwd) or die("Authorization failed");
// turn passive mode on
ftp_pasv($connect, true) or die("Passive mode failed");

另见我的文章active and passive FTP connection modes


此外,如果您的 FTP 服务器在对 PASV 命令的响应中报告错误的 IP 地址,您可能需要使用以下方法解决它:

ftp_set_option($connect, FTP_USEPASVADDRESS, false);

PHP FTP + Passive FTP Server Behind NAT

虽然在这种情况下正确的解决方案是修复服务器。


如果这些都没有帮助,请确保您已经测试过,如果您甚至可以使用与您的 PHP 代码在同一台机器上运行的任何命令行/GUI FTP 客户端检索目录列表。你可能一开始就没有编程问题。

【讨论】: