Location: PHPKode > scripts > cPanel API > cpanel-api/cPanel.php
<?php
/*
**********************************************
**********************************************
***PHP cPanel API                          ***
***Copyright Brendan Donahue, 2006         ***
**********************************************
***Feature List:                           ***
***    Connect to cPanel via HTTP or SSL   ***
***    List bandwidth and disk space usage ***
***    Change contact settings/passwords   ***
***    List, create, modify, and delete:   ***
***        Databases and MySQL users       ***
***        FTP and email accounts, quotas  ***
***        Parked, addon, and subdomains   ***
***        Apache redirects                ***
***        Email autoresponders            ***
***        Forwarders and default addresses***
**********************************************
**********************************************
*/

/**
* @ignore
*/
class HTTP
{
	function HTTP($host, $username, $password, $port = 2082, $ssl = '', $theme = 'x')
	{
		$this->ssl = $ssl ? 'ssl://' : '';
		$this->username = $username;
		$this->password = $password;
		$this->theme = $theme;
		$this->auth = base64_encode($username . ':' . $password);
		$this->port = $port;
		$this->host = $host;
		$this->path = '/frontend/' . $theme . '/';
	}

	function getData($url, $data = '')
	{
		$url = $this->path . $url;
		if(is_array($data))
		{
			$url = $url . '?';
			foreach($data as $key=>$value)
			{
				$url .= urlencode($key) . '=' . urlencode($value) . '&';
			}
			$url = substr($url, 0, -1);
		}
		$response = '';
		$fp = fsockopen($this->ssl . $this->host, $this->port);
		if(!$fp)
		{
			return false;
		}
		$out = 'GET ' . $url . ' HTTP/1.0' . "\r\n";
		$out .= 'Authorization: Basic ' . $this->auth . "\r\n";
		$out .= 'Connection: Close' . "\r\n\r\n";
		fwrite($fp, $out);
		while (!feof($fp))
		{
			$response .= @fgets($fp);
		}
		fclose($fp);
		return $response;
	}
}

/**
* Functions to manipulate cPanel
*/
class cPanel
{
	/**
  * Creates an object to manipulate cPanel
  * @param string $host cPanel host without leading http://
  * @param string $username cPanel username
  * @param string $password cPanel password
  * @param int $port cPanel port, default to 2082. Change to 2083 if using SSL
  * @param bool $ssl False for http (default), true for SSL (requires OpenSSL)
  * @param string $theme cPanel theme, (forward compatibility- 'x' theme currently required)
  * @return cPanel
  */
	function cPanel($host, $username, $password, $port = 2082, $ssl = false, $theme = 'x')
	{
		$this->HTTP = new HTTP($host, $username, $password, $port, $ssl, $theme);
	}

	/**
  * Change cPanel's password
  *
  * Returns true on success or false on failure.
  * The cPanel object is no longer usable after changing the password.
  * @param string $password new password
  * @return bool
  */
	function setPassword($password)
	{
		$data['oldpass'] = $this->HTTP->password;
		$data['newpass'] = $password;
		$response = $this->HTTP->getData('passwd/changepass.html', $data);
		if(strpos($response, 'has been') && !strpos($response, 'could not'))
		{
			return true;
		}
		return false;
	}

	/**
  * Retrieve contact email address.
  *
  * Returns the contact email address listed in cPanel.
  * @return string
  */
	function getContactEmail()
	{
		$email = array();
		preg_match('/email" value="(.*)"/', $this->HTTP->getData('contact/index.html'), $email);
		return $email[1];
	}

	/**
  * Modify contact email address
  *
  * Returns true on success or false on failure.
  * @param string new contact email address
  * @return string
  */
	function setContactEmail($email)
	{
		$data['email'] = $email;
		$response = $this->HTTP->getData('contact/saveemail.html', $data);
		if(strpos($response, 'has been'))
		{
			return true;
		}
		return false;
	}

	/**
  * List all domains in the cPanel account
  *
  * Returns a numerically-indexed array on success or false on failure.
  * @return array
  */
	function listDomains()
	{
		$domainList = array();
		preg_match_all('/<option value="([^"]*)/', $this->HTTP->getData('mail/addpop2.html'), $domainList);
		if(count($domainList[1]) > 0)
		{
			return $domainList[1];
		}
		return false;
	}

	/**
  * List all POP3 email accounts
  *
  * Returns a numerically-indexed array on success or false on failure.
  * @return array
  */
	function listMailAccounts()
	{
		$accountList = array();
		preg_match_all('/\?acct=([^"]*)/', $this->HTTP->getData('mail/pops.html'), $accountList);
		if(count($accountList[1]) > 0)
		{
			return $accountList[1];
		}
		return false;
	}

	/**
  * List MySQL database users
  *
  * Returns a numerically-indexed array on success. Returns an empty array if no users exist.
  * @return array
  */
	function listDBUsers()
	{
		$accountList = array();
		preg_match_all('/\?user=([^"]*)/', $this->HTTP->getData('sql/index.html'), $accountList);
		return $accountList[1];
	}

	/**
  * List MySQL databases
  *
  * Returns a numerically-indexed array on success. Returns an empty array if no databases exist.
  * @return array
  */
	function listDatabases()
	{
		$databaseList = array();
		preg_match_all('/deldb.html\?db=([^"]*)/', $this->HTTP->getData('sql/index.html'), $databaseList);
		return $databaseList[1];
	}

	/**
  * List FTP accounts
  *
  * Returns a numerically-indexed array on success or false on failure. This function does not include accounts listed as "Main Account".
  * @return array
  */
	function listFTPAccounts()
	{
		$accountList = Array();
		preg_match_all('/passwdftp.html\?acct=([^"]*)/', $this->HTTP->getData('ftp/accounts.html'), $accountList);
		return array_unique($accountList[1]);
	}

	/**
  * List parked domains
  *
  * Returns a numerically-indexed array on success. Returns an empty array if no domains are parked.
  * @return array
  */
	function listParked()
	{
		$domainList = array();
		preg_match_all('/<option value="([^"]*)/', $this->HTTP->getData('park/index.html'), $domainList);
		return $domainList[1];
	}

	/**
  * List addon domains
  *
  * Returns a numerically-indexed array of comma-delimited values on success. Returns an empty array if no addon domains exist.
  * @return array
  */
	function listAddons()
	{
		$domainList = array();
		$data = explode('Remove Addon', $this->HTTP->getData('addon/index.html'));
		preg_match_all('/<option value="(.*)">(.*)<\/option>/', $data[1], $domainList);
		return $domainList[0];
	}

	/**
  * List subdomains
  *
  * Returns a numerically-indexed array on success.  Returns an empty array if no subdomains exist.
  * @return array
  */
	function listSubdomains()
	{
		$domainList = array();
		$domains = explode('</select>', $this->HTTP->getData('subdomain/index.html'));
		$domains = explode('</select>', $domains[2]);
		preg_match_all('/<option value="(.*)">(.*)<\/option>/', $domains[0], $domainList);
		return $domainList[2];
	}

	/**
  * List Apache redirects
  *
  * These may be permanent or temporary redirects (status codes 301 and 302). Returns a numerically-indexed array on success. Returns an empty array if no redirects exist.
  * @return array
  */
	function listRedirects()
	{
		$redirectList = array();
		preg_match_all('/<option value="\/([^"]*)/', $this->HTTP->getData('mime/redirect.html'), $redirectList);
		return $redirectList[1];
	}


	/**
  * Parse account information
  *
  * Returns General account information or General server information. Used internally by getFreeSpace(), getSpaceUsed(), etc.
  * @param string $key key to parse for
  * @param string $type type of value to return (int, float, or string)
  * @return string
  */
	function parseIndex($key, $type = 'string')
	{
		$value = array();
		preg_match('/' . $key . '<\/td>' . "\n" . '               <td class="index2">(.*)<\/td>/', $this->HTTP->getData('index.html'), $value);
		settype($value[1], $type);
		return $value[1];
	}

	/**
  * Get free disk space
  *
  * Returns the amount of disk space available in megabytes.
  * @return mixed
  */
	function getFreeSpace()
	{
		$freeSpace = $this->parseIndex('Disk space available', 'float');
		return ($freeSpace == 0) ? 'Unlimited' : floatval($freeSpace);
	}

	/**
  * Get used disk space
  *
  * Returns the amount of disk space used in megabytes.
  * @return float
  */
	function getSpaceUsed()
	{
		return $this->parseIndex('Disk Space Usage', 'float');
	}

	/**
  * Get MySQL space usage
  *
  * Returns the amount of disk space used by MySQL databases in megabytes.
  * @return float
  */
	function getMySQLSpaceUsed()
	{
		return $this->parseIndex('MySQL Disk Space', 'float');
	}

	/**
  * Get bandwidth usage
  *
  * Returns the amount of bandwidth used this month in megabytes.
  * @return float
  */
	function getBandwidthUsed()
	{
		return $this->parseIndex('Bandwidth \(this month\)', 'float');
	}

	/**
  * Get hosting package name
  * @return string
  */
	function getHostingPackage()
	{
		return $this->parseIndex('Hosting package');
	}

	/**
  * Get shared IP address
  * @return string
  */
	function getSharedIP()
	{
		return $this->parseIndex('Shared Ip Address');
	}

	/**
  * Creates an object to manipulate email account
  * @param string $address email address of account to manipulate
  * @return emailAccount
  */
	function openEmailAccount($address)
	{
		return new emailAccount($this->HTTP->host, $this->HTTP->username, $this->HTTP->password, $this->HTTP->port, $this->HTTP->ssl, $this->HTTP->theme, $address);
	}

	/**
  * Creates an object to manipulate domain
  * @param string $domain domain to manipulate
  * @return Domain
  */
	function openDomain($domain)
	{
		return new Domain($this->HTTP->host, $this->HTTP->username, $this->HTTP->password, $this->HTTP->port, $this->HTTP->ssl, $this->HTTP->theme, $domain);
	}

	/**
  * Creates an object to manipulate FTP account
  * @param string name of FTP account to manipulate
  * @return FTPAccount
  */
	function openFTPAccount($account)
	{
		return new FTPAccount($this->HTTP->host, $this->HTTP->username, $this->HTTP->password, $this->HTTP->port, $this->HTTP->ssl, $this->HTTP->theme, $account);
	}

	/**
  * Creates an object to manipulate database
  * @param string $database name of MySQL database to manipulate
  * @return Database
  */
	function openDatabase($database)
	{
		return new Database($this->HTTP->host, $this->HTTP->username, $this->HTTP->password, $this->HTTP->port, $this->HTTP->ssl, $this->HTTP->theme, $database);
	}

	/**
  * Creates an object to manipulate database user
  * @param string $user username of MySQL user to manipulate
  * @return databaseUser
  */
	function openDatabaseUser($user)
	{
		return new databaseUser($this->HTTP->host, $this->HTTP->username, $this->HTTP->password, $this->HTTP->port, $this->HTTP->ssl, $this->HTTP->theme, $user);
	}

	/**
  * Creates an object to manipulate redirect
  * @param string $path server path to manipulate redirection on
  * @return Redirect
  */
	function openRedirect($path)
	{
		return new Redirect($this->HTTP->host, $this->HTTP->username, $this->HTTP->password, $this->HTTP->port, $this->HTTP->ssl, $this->HTTP->theme, $path);
	}
}

/**
* Functions to manipulate cPanel email accounts
*/
class emailAccount
{
	/**
  * @ignore
  */
	function emailAccount($host, $username, $password, $port = 2082, $ssl = false, $theme = 'x', $address)
	{
		$this->HTTP = new HTTP($host, $username, $password, $port, $ssl, $theme);
		if(strpos($address, '@'))
		{
			list($this->email, $this->domain) = explode('@', $address);
		}
		else
		{
			list($this->email, $this->domain) = array($address, '');
		}
	}

	/**
  * Create email account in cPanel
  *
  * Returns true on success or false on failure.
  * @param string $password email account password
  * @param int $quota quota for email account in megabytes
  * @return bool
  */
	function create($password, $quota)
	{
		$data['email'] = $this->email;
		$data['domain'] = $this->domain;
		$data['password'] = $password;
		$data['quota'] = $quota;
		$response = $this->HTTP->getData('mail/doaddpop.html', $data);
		if(strpos($response, 'failure') || strpos($response, 'already exists'))
		{
			return false;
		}
		return true;
	}

	/**
  * Get space used by account
  *
  * Returns the amount of disk space used by email account in megabytes.
  * @return int
  */
	function getUsedSpace()
	{
		$usedSpace = array();
		preg_match('/' . $this->email . '@' . $this->domain . "<\\/font><\\/td>\n        <td align=\"center\" valign=\"top\">([^&]*)/", $this->HTTP->getData('mail/pops.html?extras=disk'), $usedSpace);
		return $usedSpace[1];
	}

	/**
  * Get account storage quota
  *
  * Returns amount of disk space allowed for email account in megabytes.
  * @return int
  */
	function getQuota()
	{
		$quota = array();
		$data['email'] = $this->email;
		$data['domain'] = $this->domain;
		preg_match('/quota" value="([^"]*)/', $this->HTTP->getData('mail/editquota.html', $data), $quota);
		return ($quota[1] == 0) ? 'Unlimited' : intval($quota[1]);
	}

	/**
  * Modify account storage quota
  *
  * Returns true on success or false on failure.
  * @param int $quota quota for email account in megabytes
  * @return bool
  */
	function setQuota($quota)
	{
		$data['email'] = $this->email;
		$data['domain'] = $this->domain;
		$data['quota'] = $quota;
		$response = $this->HTTP->getData('mail/doeditquota.html', $data);
		if(strpos($response, 'success'))
		{
			return true;
		}
		return false;
	}

	/**
  * Change email account password
  *
  * Returns true on success or false on failure.
  * @param string $password email account password
  * @return bool
  */
	function setPassword($password)
	{
		$data['email'] = $this->email;
		$data['domain'] = $this->domain;
		$data['password'] = $password;
		$response = $this->HTTP->getData('mail/dopasswdpop.html', $data);
		if(strpos($response, 'success') && !strpos($response, 'failure'))
		{
			return true;
		}
		return false;
	}

	/**
  * List email forwarders
  *
  * Returns a numerically-indexed array of forwarders for the email account. Returns an empty array if there are no forwarders.
  * @return array
  */
	function listForwarders()
	{
		$forwarders = array();
		preg_match_all('/\?email=' . $this->email . '@' . $this->domain . '=([^"]*)/', $this->HTTP->getData('mail/fwds.html'), $forwarders);
		return $forwarders[1];
	}

	/**
  * Create email forwarder
  *
  * Returns true on success or false on failure.
  * @param string $forward forwarding address
  * @return bool
  */
	function addForwarder($forward)
	{
		$data['email'] = $this->email;
		$data['domain'] = $this->domain;
		$data['forward'] = $forward;
		$response = $this->HTTP->getData('mail/doaddfwd.html', $data);
		if(strpos($response, 'redirected'))
		{
			return true;
		}
		return false;
	}

	/**
  * Delete email forwarder
  *
  * Permanently removes the account's email forwarder and returns true.
  * @param string $forwarder forwarding address to delete
  * @return bool
  */
	function delForwarder($forwarder)
	{
		$data['email'] = $this->email . '@' . $this->domain . '=' . $forwarder;
		$this->HTTP->getData('mail/dodelfwd.html', $data);
		return true;
	}

	/**
  * Create email autoresponder
  *
  * Returns true on success or false on failure.
  * @param string $from from email address
  * @param string $subject email subject line
  * @param string $charset character set
  * @param bool $html true for HTML email
  * @param string $body body of email message
  * @return bool
  */
	function addAutoResponder($from, $subject, $charset, $html, $body)
	{
		$data['email'] = $this->email;
		$data['domain'] = $this->domain;
		$data['from'] = $from;
		$data['subject'] = $subject;
		$data['charset'] = $charset;
		if($html)
		{
			$data['html'] = $html;
		}
		$data['body'] = $body;
		$response = $this->HTTP->getData('mail/doaddars.html', $data);
		if(strpos($response, 'success') && !strpos($response, 'failure'))
		{
			return true;
		}
		return false;
	}

	/**
  * Delete email autoresponder
  *
  * Deletes autoresponder for email account if it exists, and returns true.
  * @return bool
  */
	function delAutoResponder()
	{
		$this->HTTP->getData('mail/dodelautores.html?email=' . $this->email . '@' . $this->domain);
		return true;
	}

	/**
  * Delete email account
  *
  * Permanenetly removes POP3 account. Returns true on success or false on failure.
  * @return bool
  */
	function delete()
	{
		$data['email'] = $this->email;
		$data['domain'] = $this->domain;
		$response = $this->HTTP->getData('mail/realdelpop.html', $data);
		if(strpos($response, 'success'))
		{
			return true;
		}
		return false;
	}
}

/**
* Functions to manipulate domains in cPanel
*/
class Domain
{
	/**
  * @ignore
  */
	function Domain($host, $username, $password, $port = 2082, $ssl = false, $theme = 'x', $domain)
	{
		$this->HTTP = new HTTP($host, $username, $password, $port, $ssl, $theme);
		$this->domain = $domain;
	}

	/**
  * Get default address
  *
  * Retrieves the default email address for the domain.
  * @return string
  */
	function getDefaultAddress()
	{
		$default = explode('<b>' . $this->domain . '</b>', $this->HTTP->getData('mail/def.html'));
		if($default[1])
		{
			$default = explode('<td>', $default[1]);
			$default = explode('</td>', $default[1]);
			return trim($default[0]);
		}
	}

	/**
  * Modify default address
  *
  * Changes the default email address for the domain. Returns true on success or false on failure.
  * @param string $adderss new default address
  * @return bool
  */
	function setDefaultAddress($address)
	{
		$data['domain'] = $this->domain;
		$data['forward'] = $address;
		$response = $this->HTTP->getData('mail/dosetdef.html', $data);
		if(strpos($response, 'is now'))
		{
			return true;
		}
		return false;
	}

	/**
  * Park domain
  *
  * Returns true on success or false on failure.
  * @return bool
  */
	function parkDomain()
	{
		$data['domain'] = $this->domain;
		$response = $this->HTTP->getData('park/doaddparked.html', $data);
		if(strpos($response, 'success') && !strpos($response, 'error'))
		{
			return true;
		}
		return false;
	}

	/**
  * Delete parked domain
  *
  * Returns true on success or false on failure.
  * @return bool
  */
	function unparkDomain()
	{
		$data['domain'] = $this->domain;
		$response = $this->HTTP->getData('park/dodelparked.html', $data);
		if(strpos($response, 'success') && !strpos($response, 'Error'))
		{
			return true;
		}
		return false;
	}

	/**
  * Create addon domain
  *
  * Returns true on success or false on failure.
  * @param string $user username or directory
  * @param string $pass password
  * @return bool
  */
	function addonDomain($user, $pass)
	{
		$data['domain'] = $this->domain;
		$data['user'] = $user;
		$data['pass'] = $pass;
		$response = $this->HTTP->getData('addon/doadddomain.html', $data);
		if(strpos($response, 'added') && !strpos($response, 'Error'))
		{
			return true;
		}
		return false;
	}

	/**
  * Delete addon domain
  *
  * Returns true on success or false on failure.
  * @return bool
  */
	function delAddonDomain()
	{
		$data['domain'] = $this->domain;
		$response = $this->HTTP->getData('addon/dodeldomain.html', $data);
		if(strpos($response, 'success') && !strpos($response, 'Error'))
		{
			return true;
		}
		return false;
	}

	/**
  * Create subdomain
  *
  * Returns true on success or false on failure.
  * @param string $subdomain name of subdomain to create
  * @return bool
  */
	function addSubdomain($subdomain)
	{
		$data['domain'] = $subdomain;
		$data['rootdomain'] = $this->domain;
		$response = $this->HTTP->getData('subdomain/doadddomain.html', $data);
		if(strpos($response, 'added') && !strpos($response, 'Error'))
		{
			return true;
		}
		return false;
	}

	/**
  * Get subdomain redirection
  *
  * Returns the URL a subdomain is redirected to.
  * @return string
  */
	function getSubdomainRedirect($subdomain)
	{
		$redirect = array();
		$data['domain'] = $subdomain . '_' . $this->domain;	
		preg_match('/40 value="([^"]*)/', $this->HTTP->getData('subdomain/doredirectdomain.html', $data), $redirect);
		return $redirect[1];
	}

	/**
  * Redirect subdomain
  *
  * Redirects a subdomain of the current domain to another address.
  * @param string $subdomain name of subdomain
  * @param string $url url to redirect to
  * @return bool
  */
	function redirectSubdomain($subdomain, $url)
	{
		$data['domain'] = $subdomain . '_' . $this->domain;
		$data['url'] = $url;
		$response = $this->HTTP->getData('subdomain/saveredirect.html', $data);
		if(strpos($response, 'redirected') && !strpos($response, 'Disabled'))
		{
			return true;
		}
		return false;
	}

	/**
  * Remove subdomain redirection
  *
  * @param string $subdomain name of subdomain
  * @return bool
  */
	function delRedirectSubdomain($subdomain)
	{
		$data['domain'] = $subdomain . '_' . $this->domain;
		$response = $this->HTTP->getData('subdomain/donoredirect.html', $data);
		if(strpos($response, 'disabled'))
		{
			return true;
		}
		return false;
	}

	/**
  * Delete subdomain
  *
  * Returns true on success or false on failure.
  * @param string $subdomain name of subdomain to delete
  * @return bool
  */
	function delSubdomain($subdomain)
	{
		$data['domain'] = $subdomain . '_' . $this->domain;
		$response = $this->HTTP->getData('subdomain/dodeldomain.html', $data);
		if(strpos($response, 'Removed'))
		{
			return true;
		}
		return false;
	}
}

/**
* Functions to manipulate cPanel FTP accounts
*/
class FTPAccount
{
	/**
  * Delete email autoresponder
  * @ignore
  */
	function FTPAccount($host, $username, $password, $port = 2082, $ssl = false, $theme = 'x', $account)
	{
		$this->HTTP = new HTTP($host, $username, $password, $port, $ssl, $theme);
		$this->account = $account;
	}

	/**
  * Create FTP account
  *
  * Returns true on success or false on failure.
  * @param string $password account password
  * @param string $quota disk space quota in megabytes
  * @param string directory user's home directory
  * @return bool
  */
	function create($password, $quota, $directory)
	{
		$data['login'] = $this->account;
		$data['password'] = $password;
		$data['quota'] = $quota;
		$data['homedir'] = $directory;
		$response = $this->HTTP->getData('ftp/doaddftp.html', $data);
		if(strpos($response, 'failure') || strpos($response, 'Fatal') || !strpos($response, 'Added'))
		{
			return false;
		}
		return true;
	}

	/**
  * Get used space
  *
  * Returns the amount of disk space used by the FTP account.
  * @return int
  */
	function getUsedSpace()
	{
		$usedSpace = explode('<td>' . $this->account . '</td>', $this->HTTP->getData('ftp/accounts.html'));
		$usedSpace = explode('</td><td>', $usedSpace[1], 2);
		return floatval(substr($usedSpace[1], 0, strpos($usedSpace[1], '/')));
	}

	/**
  * Get storage quota
  *
  * Returns the storage quota of the FTP account in megabytes.
  * @return bool
  */
	function getQuota()
	{
		$quota = array();
		$data['acct'] = $this->account;
		preg_match('/"quota" value="([^"]*)/', $this->HTTP->getData('ftp/editquota.html', $data), $quota);
		return ($quota[1] == 0) ? 'Unlimited' : intval($quota[1]);
	}

	/**
  * Set storage quota
  *
  * Modifies the maximum disk space allowed for the FTP account. Returns true on success or false on failure.
  * @param int $quota new quota in megabytes
  * @return bool
  */
	function setQuota($quota)
	{
		$data['acct'] = $this->account;
		$data['quota'] = $quota;
		$response = $this->HTTP->getData('ftp/doeditquota.html', $data);
		if(strpos($response, 'success'))
		{
			return true;
		}
		return false;
	}

	/**
  * Change password
  *
  * Changes the FTP account password and returns true on success or false on failure.
  * @param string $password new password
  * @return bool
  */
	function setPassword($password)
	{
		$data['acct'] = $this->account;
		$data['password'] = $password;
		$response = $this->HTTP->getData('ftp/dopasswdftp.html', $data);
		if(strpos($response, 'Changed'))
		{
			return true;
		}
		return false;
	}

	/**
  * Delete FTP account
  *
  * Permanently removes the FTP account and returns true on success or false on failure.
  * @return bool
  */
	function delete()
	{
		$data['login'] = $this->account;
		$response = $this->HTTP->getData('ftp/realdodelftp.html', $data);
		if(strpos($response, 'deleted'))
		{
			return true;
		}
		return false;
	}
}

/**
* Functions to manipulate MySQL databases in cPanel
*/
class Database
{
	/**
  * @ignore
  */

	function Database($host, $username, $password, $port = 2082, $ssl = false, $theme = 'x', $database)
	{
		$this->HTTP = new HTTP($host, $username, $password, $port, $ssl, $theme);
		$this->database = $database;
	}

	/**
  * Create database
  *
  * Creates a MySQL database with the specified name. Returns true on success or false on failure.
  * @return bool
  */
	function create()
	{
		$data['db'] = $this->database;
		$response = $this->HTTP->getData('sql/adddb.html', $data);
		if(strpos($response, 'Added'))
		{
			return true;
		}
		return false;
	}

	/**
  * Add user to database
  *
  * Gives the specified user all permissions on the database and returns true on success or false on failure.
  * @param string $user MySQL username to add to database
  * @return bool
  */
	function addUser($user)
	{
		$data['user'] = $user;
		$data['db'] = $this->database;
		$data['ALL'] = 'ALL';
		$response = $this->HTTP->getData('sql/addusertodb.html', $data);
		if(strpos($response, 'Added'))
		{
			return true;
		}
		return false;
	}

	/**
  * Delete user from database
  *
  * Removes the user's permissions from this database.
  * @param string $user MySQL username
  * @return bool
  */
	function delUser($user)
	{
		$data['user'] = $user;
		$data['db'] = $this->database;
		$response = $this->HTTP->getData('sql/deluserfromdb.html', $data);
		if(strpos($response, 'Deleted'))
		{
			return true;
		}
		return false;
	}

	/**
  * Delete database
  *
  * Permanently drops a MySQL database and returns true on success or false on failure.
  * @return bool
  */
	function delete()
	{
		$data['db'] = $this->database;
		$response = $this->HTTP->getData('sql/deldb.html', $data);
		if(strpos($response, 'dropped'))
		{
			return true;
		}
		return false;
	}
}

/**
* Functions to manipulate MySQL database users in cPanel
*/
class databaseUser
{
	/**
  * @ignore
  */
	function databaseUser($host, $username, $password, $port = 2082, $ssl = false, $theme = 'x', $user)
	{
		$this->HTTP = new HTTP($host, $username, $password, $port, $ssl, $theme);
		$this->user = $user;
	}

	/**
  * Create database user
  *
  * Creates a MySQL user and returns true on success or false on failure.
  * @param string $password MySQL password
  * @return bool
  */
	function create($password)
	{
		$data['user'] = $this->user;
		$data['pass'] = $password;
		$response = $this->HTTP->getData('sql/adduser.html', $data);
		if(strpos($response, 'Added'))
		{
			return true;
		}
		return false;
	}

	/**
  * Delete database user
  *
  * Permenently deletes the MySQL user.
  * @return bool
  */
	function delete()
	{
		$data['user'] = $this->user;
		$response = $this->HTTP->getData('sql/deluser.html', $data);
		if(strpos($response, 'Removed'))
		{
			return true;
		}
		return false;
	}
}

/**
* Functions to manipulate URL redirection in cPanel
*/
class Redirect
{
	/**
  * Delete email autoresponder
  * @ignore
  */
	function Redirect($host, $username, $password, $port = 2082, $ssl = false, $theme = 'x', $path)
	{
		$this->HTTP = new HTTP($host, $username, $password, $port, $ssl, $theme);
		$this->path = '/' . $path;
	}

	/**
  * Create redirect
  *
  * Creates a 301 or 302 redirect and returns true on success or false on failure.
  * @param string $url URL to redirect to
  * @param string $type 'permanent' or 'temp'
  * @return bool
  */
	function create($url, $type = 'permanent')
	{
		$data['path'] = $this->path;
		$data['url'] = $url;
		$data['type'] = $type;
		$response = $this->HTTP->getData('mime/addredirect.html', $data);
		if(strpos($response, 'Added'))
		{
			return true;
		}
		return false;
	}

	/**
  * Get redirect URL
  *
  * Get the path a URL is redirected to
  * @return string
  */
	function getRedirectURL()
	{
		$url = array();
		preg_match('%' . $this->path . '</td><td>([^<]*)%', $this->HTTP->getData('mime/redirect.html'), $url);
		return $url[1];
	}

	/**
  * Delete redirect
  *
  * Permanently removes the redirect and returns true on success or false on failure.
  * @return bool
  */
	function delete()
	{
		$data['path'] = '/' . $this->path;
		$response = $this->HTTP->getData('mime/delredirect.html', $data);
		if(strpos($response, 'Removed'))
		{
			return true;
		}
		return false;
	}
}
?>
Return current item: cPanel API