Появилось следующее сообщение об ошибке:
Предупреждение: 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 Сервис недоступен, соединение с закрытием. Это может быть ответ любой команде, если служба знает, что она должна быть отключена.
У вас есть ровно два возможных решения для решения этой проблемы:
Если допустимый максимум ниже 3, вы должны сначала попытаться изменить файл конфигурации на своем сервере, потому что для большинства программ требуется как минимум 3, иногда 2.
При столкновении с проблемой внутри программы: некоторые FTP-клиенты позволяют пользователю изменять количество используемых подключений в настройках. В основном они используют около 3 подключений одновременно, 2 для повышения производительности, 1 для включения просмотра, когда пользователь выполняет другие задачи. Вы можете уменьшить количество, не теряя при этом важных функций до 2 или даже до 1, если вы не беспокоитесь о просмотре при выполнении других задач. ( Например, разрешить FileZilla ).
Когда вы сталкиваетесь с проблемой в своем собственном коде: уменьшите количество задач, которые выполняются одновременно. Проверьте также, правильно ли ваш код закрывает соединения, а также при возникновении ошибок. Он всегда должен быть закрыт, что бы ни случилось. В PHP вы можете использовать блоки try-catch , внутри класса вы можете поместить код для закрытия соединения в метод __destruct .
Это зависит от того, какой FTP-сервер вы используете. В PureFTP (используется большинством систем UNIX) вам необходимо изменить параметр MaxClientsPerIP
в /etc/pure-ftpd.conf
. Размер по умолчанию, заданный конфигурационным файлом по умолчанию или большинством администраторов хостинговых компаний, составляет около 5-15. Увеличьте значение, пока оно не соответствует вашим потребностям. Имейте в виду, что теоретически прокси-сервер, который находится где-то между большинством пользователей и FTP-сервером, может вызвать проблемы, поскольку большинство соединений будет использовать тот же IP-адрес.
В вашем специальном случае: Как упоминалось в Mave , вы не закрываете соединения в своем коде. Это может привести к активизации нескольких подключений, особенно если вы используете код за короткий промежуток времени несколько раз. Таким образом, в вашем конкретном случае будет добавлен ftp_close($conId);
решить проблему. (Используйте также блок try-catch.)