【问题标题】:Too many FTP connections, can't accept moreFTP 连接太多,无法接受更多
【发布时间】:2015-08-28 02:54:40
【问题描述】:

我收到以下错误消息:

警告: ftp_login():我在第 58 行的 C:\xampp\htdocs\test\ftp_sync.php 中不能以同一用户接受超过 6 个连接

导致错误的代码:

function newStream($i){
        $conId = ftp_connect($this->ftpServer);

        // login with username and password
        $login_result = ftp_login($conId, $this->ftpUsername, $this->ftpPassword);//line 58
        // /home/content/61/10367861/html/

        // turn passive mode on
        ftp_pasv($conId, true);

        $this->conIds[$i]=$conId;
        $this->localFiles[$i]='';
        $this->conStats[$i]=FTP_FAILED;//initial value
    }

有没有人知道这个错误信息是什么意思?

【问题讨论】:

  • 确保在完成后关闭连接:ftp_close($conId);

标签: php server ftp ftp-client


【解决方案1】:

抛出此错误是因为您的服务器限制了每个用户/IP 地址的最大连接数。大多数人遇到的错误大多是这样的:

421我不能以同一用户接受超过 [0-9]+ 个连接

421 来自该 IP 的连接过多 ([0-9]+)

主要用于此类错误的 FTP 错误代码是421。在RFC 959 (FTP) 中定义为:

421 服务不可用,正在关闭控制连接。这可能是一个 如果服务知道它必须关闭,则回复任何命令。

您现在有两种可能的解决方案来解决这个问题:

  1. 减少程序建立的连接数量。
  2. 增加允许的与服务器的 FTP 连接数量。

如果允许的最大值低于 3,那么您应该首先尝试更改服务器上的配置文件,因为大多数程序至少需要 3,有时需要 2。

  1. 减少连接数量

在程序中遇到问题时:一些 FTP 客户端允许用户在设置中更改使用的连接数量。他们大多同时使用大约 3 个连接,2 个用于提高性能,1 个用于在用户执行其他任务时启用浏览。如果您在执行其他任务时不担心浏览,您可以将数量减少到 2 甚至 1,而不会丢失任何重要功能。 (FileZilla for example allow this.)

在您自己的代码中遇到问题时:减少并发执行的任务数量。还要检查您的代码是否以正确的方式关闭连接,以及引发错误时。无论发生什么,它都应该始终关闭。在 PHP 中你可以使用try-catch-blocks,在一个类中你可以将关闭连接的代码放入__destruct method

  1. 增加允许的连接数

这取决于您使用的 FTP 服务器类型。在PureFTP(大多数UNIX 系统使用)中,您需要更改/etc/pure-ftpd.conf 中的MaxClientsPerIP 设置。默认配置文件或托管公司的大多数管理员设置的默认数量约为 5-15。增加值,直到它适合您的需要。 请注意,理论上介于最多用户和 FTP 服务器之间的代理服务器可能会导致问题,因为大多数连接将使用相同的 IP 地址。


在您的特殊情况下:正如Mave 提到的,您没有关闭代码中的连接。这很容易导致多个连接处于活动状态,特别是如果您在短时间内多次运行代码。因此,在您的特定情况下,添加 ftp_close($conId); 可以解决问题。 (也可以使用 try-catch-block。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2013-05-09
    • 2018-08-04
    • 2017-12-27
    • 2011-03-05
    • 2014-07-22
    相关资源
    最近更新 更多