Слишком много FTP-подключений, не может принимать больше

Появилось следующее сообщение об ошибке:

Предупреждение: ftp_login (): я не могу принять более 6 соединений в качестве одного и того же пользователя в C: \ xampp \ htdocs \ test \ ftp_sync.php в строке 58

Мой код, который вызывает ошибку:

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 } 

Кто-нибудь, возможно, знает, что означает это сообщение об ошибке?

Эта ошибка возникает, потому что ваш сервер ограничивает максимальное количество подключений на каждого пользователя / IP-адрес. Ошибки, с которыми сталкивается большинство людей, выглядят в основном так:

421 Я не могу принимать больше, чем [0-9] + соединения, как один и тот же пользователь

421 Слишком много соединений ( [0-9] + ) от этого IP-адреса

Код ошибки FTP, который в основном используется для такого рода ошибок, – 421 . Что определено в RFC 959 (FTP) как:

421 Сервис недоступен, соединение с закрытием. Это может быть ответ любой команде, если служба знает, что она должна быть отключена.

У вас есть ровно два возможных решения для решения этой проблемы:

  1. Уменьшите количество подключений, сделанных вашей программой.
  2. Увеличьте количество разрешенных FTP-соединений на вашем сервере.

Если допустимый максимум ниже 3, вы должны сначала попытаться изменить файл конфигурации на своем сервере, потому что для большинства программ требуется как минимум 3, иногда 2.

1. Уменьшение количества соединений

При столкновении с проблемой внутри программы: некоторые FTP-клиенты позволяют пользователю изменять количество используемых подключений в настройках. В основном они используют около 3 подключений одновременно, 2 для повышения производительности, 1 для включения просмотра, когда пользователь выполняет другие задачи. Вы можете уменьшить количество, не теряя при этом важных функций до 2 или даже до 1, если вы не беспокоитесь о просмотре при выполнении других задач. ( Например, разрешить FileZilla ).

Когда вы сталкиваетесь с проблемой в своем собственном коде: уменьшите количество задач, которые выполняются одновременно. Проверьте также, правильно ли ваш код закрывает соединения, а также при возникновении ошибок. Он всегда должен быть закрыт, что бы ни случилось. В PHP вы можете использовать блоки try-catch , внутри класса вы можете поместить код для закрытия соединения в метод __destruct .

2. Увеличьте количество разрешенных соединений

Это зависит от того, какой FTP-сервер вы используете. В PureFTP (используется большинством систем UNIX) вам необходимо изменить параметр MaxClientsPerIP в /etc/pure-ftpd.conf . Размер по умолчанию, заданный конфигурационным файлом по умолчанию или большинством администраторов хостинговых компаний, составляет около 5-15. Увеличьте значение, пока оно не соответствует вашим потребностям. Имейте в виду, что теоретически прокси-сервер, который находится где-то между большинством пользователей и FTP-сервером, может вызвать проблемы, поскольку большинство соединений будет использовать тот же IP-адрес.


В вашем специальном случае: Как упоминалось в Mave , вы не закрываете соединения в своем коде. Это может привести к активизации нескольких подключений, особенно если вы используете код за короткий промежуток времени несколько раз. Таким образом, в вашем конкретном случае будет добавлен ftp_close($conId); решить проблему. (Используйте также блок try-catch.)