How to detect server Control Panel type like cpanel and directadmin for using them api's: that's enough for me if it just detects cpanel, directadmin, kloxo and plesk
$panel = ???????????;
switch($panel){
case 'cpanel':
$xmlapi = new xmlapi($ip);
//...
break;
case 'directadmin':
$sock = new HTTPSocket;
//...
break;
.
.
.
}
plesk port is 8443. how to use plesk api http://download1.parallels.com/Plesk/Doc/en-US/online/plesk-api-rpc/
As hanky-panky said there is no straight forward solution for this, you need to implement your own creative method. you may need to detect one control panel with opening socket,while other using an specific file existence (ex. Cpanel puts api files on php include path) or any other idea.
you can use this class for this purpose
namespace Model;
// usage:
//include 'detectControlPanel';
//$object = new \model\detectControlPanel();
//$result = $object->getDetect();
//var_dump($result);
class detectControlPanel
{
public $debug = false;
protected $detect = array();
public function getDetect()
{
return $this->detect;
}
public function __construct($debug = false)
{
$this->run();
$this->debug = $debug;
$this->debug($this->detect);
}
public function run()
{
$this->detect['cpanel'] = $this->isCpanel();
$this->detect['virtualmin'] = $this->isVirtualmin();
$this->detect['plesk'] = $this->isPlesk();
$this->detect['directadmin'] = $this->isDirectadmin();
return $this->detect;
}
private function isCpanel()
{
try {
$this->telnet('localhost', 2082);
return true;
} catch (\Exception $ex) {
$this->debug($ex);
return false;
}
}
private function isVirtualmin()
{
try {
$this->telnet('localhost', 10000);
return true;
} catch (\Exception $ex) {
$this->debug($ex);
return false;
}
}
private function isDirectadmin()
{
try {
$this->telnet('localhost', 2222);
return true;
} catch (\Exception $ex) {
$this->debug($ex);
return false;
}
}
private function isPlesk()
{
try {
$this->telnet('localhost', 8443);
return true;
} catch (\Exception $ex) {
$this->debug($ex);
return false;
}
}
private function debug($input)
{
if ($this->debug == true) {
if (gettype($input) == 'string') {
echo '<br>' . "
";
echo $input;
echo '<br>' . "
";
} elseif (gettype($input) == 'array') {
echo '<pre>' . "
";
print_r($input);
echo '</pre>' . "
";
} elseif (gettype($input) == 'object' && get_class($input) == 'Exception') {
echo '<pre>' . "
";
echo $input->getMessage();
echo '</pre>' . "
";
} else {
var_dump($input);
}
}
}
private function telnet($hostname, $port)
{
if (!$hostname)
throw new \Exception("empty host name");
if (!$port)
throw new \Exception("empty port number");
$ipAddress = gethostbyname($hostname);
$link = @fsockopen($ipAddress, $port, $errno, $error);
if ($error) {
throw new \Exception($error, $errno);
}
if ($link) {
return true;
}
return false;
}
}