how to detect server's control panel type with php?

735 views Asked by At

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;
       .
       .
       .
    }
2

There are 2 answers

0
Manikanta Sripadi On

how to detect web hosting control panel type with php

code :

<?php 

class detectControlPanel
{
 protected $detect = null;

   public function getDetect()
   {
      return $this->detect;
    }

   public function __construct()
   {
       if($this->isCpanel()){
           $this->detect =  'cpanel';
       } elseif($this->isVirtualmin()){
           $this->detect =  'virtualmin';
       } elseif($this->isPlesk()){
           $this->detect =  'plesk';
       } elseif($this->isDirectadmin()){
           $this->detect =  'directadmin';
       } elseif($this->isDirectadmin()){
           $this->detect =  'nspanel';
       }
   }

   private function isCpanel(){
       if(is_dir('/usr/local/cpanel')){ return true; }else{ return false; }
   }
   private function isVirtualmin(){
       if(is_dir('/usr/share/webmin')){ return true; }else{ return false; }
   }
   private function isPlesk(){
       if(is_dir('/usr/local/psa')){ return true; }else{ return false; }
   }
   private function isDirectadmin(){
       if(is_dir('/usr/local/directadmin')){ return true; }else{ return false; }
   }
   private function isNspanel(){
       if(is_dir('/opt/neoistone') || is_dir('/etc/neoistone') || is_dir('/usr/local/neoistone')){ return true; }else{ return false; }
   }
}
?>

code2 :

<?php 
$cont = new detectControlPanel();
print_r($cont->getDetect());

?>

how to detect web hosting control panel type with php preview

0
Kaveh Sarkhanlou On

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>' . "\n";
            echo $input;
            echo '<br>' . "\n";
        } elseif (gettype($input) == 'array') {
            echo '<pre>' . "\n";
            print_r($input);
            echo '</pre>' . "\n";
        } elseif (gettype($input) == 'object' && get_class($input) == 'Exception') {
            echo '<pre>' . "\n";
            echo $input->getMessage();
            echo '</pre>' . "\n";
        } 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;
}
}