I got the following error message:
Warning: ftp_login(): I can't accept more than 6 connections as the same user in C:\xampp\htdocs\test\ftp_sync.php on line 58
My code which causes the error:
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
}
Does anyone probably know what this error message means?
This error is thrown because your server restricts the maximum number of connections per user / IP address. The errors the most people encounter look mostly like this:
The FTP error code which is mostly used for this kind of error is
421
. Which is defined in RFC 959 (FTP) as:You have now exactly two possible solutions to solve this problem:
If the allowed maximum is beneath 3, then you should first try to change the config file on your server, because the most programs need at least 3, sometimes 2.
When facing the problem within a program: Some FTP clients allow the user to change the amount of used connections in the settings. They are mostly using about 3 connections at the same time, 2 to increase the performance, 1 to enable browsing while the user is performing other tasks. You can decrease the amount without losing any important functionality to 2 or even to 1, if you don't bother about browsing while performing other tasks. (FileZilla for example allow this.)
When facing the problem within your own code: Reduce the amount of tasks which are performed concurrently. Check also if your code is closing the connections the right way, also when errors are thrown. It should always be closed, no matter what happens. In PHP you could use try-catch-blocks, inside a class you could put the code for closing the connection into the __destruct method.
This depends on what kind of FTP server you are using. In PureFTP (used by the most UNIX systems) you need to change the
MaxClientsPerIP
setting in/etc/pure-ftpd.conf
. The default amount set by the default configuration file or by the most administrators at hosting companies is somewhere about 5-15. Increase the value until it fits your needs. Be aware that theoretically a proxy server which is somewhere between the most users and the FTP server could cause trouble, because the most connection will then use the same IP address.In your special case: As Mave mentioned, you aren't closing the connections in your code. This could easily cause multiple connections being active, especially if you are running the code in a short period of time multiple times. So, in your specific case would adding
ftp_close($conId);
fix the problem. (Use also a try-catch-block.)