I have a php class that connects to certain devices via ssh.
I would like to add logic to control the number of connections, per device.
This is what my class constructor looks like:
public function __construct($hostname, $password, $username = "", $timeout = 10)
{
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/phpseclib');
include_once('Net/SSH2.php');
$this->_hostname = $hostname;
$this->_password = $password;
$this->_username = $username;
} // __construct
I’ve read some other posts like : How to save a variable at application level in php?
and I guess I just want to confirm the following:
- I think database would be better than file because of scenarios where multiple sessions are trying to write / update the class counter.
- the class contructor and destructors are the best / only place to add this type of logic.
The only thing is that currently, I don’t have a database associated with my app – so I hate to add this “dependency” but it does seem like the best way to go. If you have any comments / suggestions, please let me know.
Thanks.
EDIT 1:
One additional question that comes up with adding the logic in my constructor is the following…
Assuming I have the following logic (pseudocode)
public function __construct($hostname)
{
if (! ok_to_connect($hostname) )
{
exit;
}
}
public function ok_to_connect($hostname)
{
$filelist = glob($counterslocation.$hostname.'*.tmp');
if ( count($filelist) < 4) {
$handle = fopen($counterslocation.$hostname.rand(1,4).".tmp", "r");
return true;
}
else {
return false;
}
}
In the case where i already have 4 active connections, wouldn’t calling exit() in my constructor still envoke the destructor? This means that the destructor will try to delete one of the temp files, even though the ok_to_connect() function didn’t actually create a file. I guess i can have the ok_to_connect() method set a public variable in the class, and have the destructor check this before deleting any files.
Is this the best way to go?
Instead of keeping count in a single file, you could,
__constructcreate a file in a common directory,__destructremove that file.This way you won’t have problems with simultaneous write operations. And the total number of files would show the number of open connections.