php管理虛擬機,通過代理連接
阿新 • • 發佈:2017-08-12
php 管理 虛擬機
1、 進入安裝目錄
Cd C:\Program Files\Oracle\VirtualBox
設置web認證庫為null:
VboxManagesetproperty websrvauthlibrary null
然後開啟服務
vboxwebsrv --host 0.0.0.0
2、在瀏覽器輸入http://127.0.0.1:18083
在博客下方附件,提供vbox接口文件
寫代碼實現時,vbox_oper操作幫助類
include_once(‘vboxServiceWrappers.php‘);
class Vbox_oper
{
protected $serverIp;
protected $serverPort= "18083";
protected $proxy_uname;
protected $proxy_password;
protected $proxy_host;
protected $proxy_port;
protected $item;
protected $connection;
/*
* 模塊名稱:得到連接
* 參數說明:
* 作者:csl
*/
public function getConn()
{
$url = "http://" . $this->serverIp . ":" .$this->serverPort . "/";
//$this->connection = new SoapClient("vboxwebService.wsdl", array(‘location‘ => $url, ‘connection_timeout‘ => 5,));
$this->connection = new SoapClient("vboxwebService.wsdl", array(‘location‘ => $url,‘connection_timeout‘=>5,
‘proxy_host‘=> $this->proxy_host, ‘proxy_port‘ => $this->proxy_port,
‘proxy_login‘ => $this->proxy_uname, ‘proxy_password‘ => $this->proxy_password));
return $this->connection;
}
/*
* 模塊名稱:初始化代理信息
* 參數說明:
* init_proxy 包含:ip,port,username,password
* 作者:csl
*/
public function init_proxy($proxy){
if(!empty($proxy[‘ip‘]))
$this->proxy_host = $proxy[‘ip‘];
if(!empty($proxy[‘port‘]))
$this->proxy_port = (int)$proxy[‘port‘];
if(!empty($proxy[‘username‘]))
$this->proxy_uname = $proxy[‘username‘];
if(!empty($proxy[‘password‘]))
$this->proxy_password = $proxy[‘password‘];
}
/*
* 模塊名稱:初始化服務器信息
* 參數說明:
* init_proxy 包含:server_ip,sbmc
* 作者:csl
*/
public function init_data($item, $proxy = array())
{
$this->serverPort = "18083";
if(!empty($item[‘server_ip‘]))
$this->serverIp = $item[‘server_ip‘];
if(!empty( $item[‘sbmc‘]))
$this->name = $item[‘sbmc‘];
if (!empty($proxy)) {
$this->init_proxy($proxy);
}
}
/*
* 模塊名稱:啟動虛擬機
* 參數說明:
* 作者:csl
*/
public function start()
{
$this->getConn();
$websessionManager = new IWebsessionManager($this->connection);
$virtualbox = $websessionManager->logon("", "");
$machine = $virtualbox->findMachine($this->name);
$session = $websessionManager->getSessionObject($virtualbox->handle);
$state = (string)$machine->state;
if ($state != ‘Running‘ && $state != ‘Paused‘) {
$progress = $machine->launchVMProcess($session->handle, "headless", "");
}
}
/*
* 模塊名稱:關閉虛擬機
* 參數說明:
* 作者:csl
*/
public function stop()
{
$this->getConn();
$websessionManager = new IWebsessionManager($this->connection);
$virtualbox = $websessionManager->logon("", "");
$machine = $virtualbox->findMachine($this->name);
$session = $websessionManager->getSessionObject($virtualbox->handle);
$state = (string)$machine->state;
if ($state == ‘Running‘ || $state == ‘Paused‘) {
$lockType = new LockType($session, ‘Shared‘);
$machine->lockMachine($session, $lockType->NameMap[1]);
$iconsole = $session->getConsole();
$progress = $iconsole->powerDown();
}
}
/*
* 模塊名稱:重啟虛擬機
* 參數說明:
* 作者:csl
*/
public function restart()
{
$this->getConn();
$websessionManager = new IWebsessionManager($this->connection);
$virtualbox = $websessionManager->logon("", "");
$machine = $virtualbox->findMachine($this->name);
$session = $websessionManager->getSessionObject($virtualbox->handle);
$state = (string)$machine->state;
if ($state == ‘Running‘ || $state == ‘Paused‘) {
$lockType = new LockType($session, ‘Shared‘);
$machine->lockMachine($session, $lockType->NameMap[1]);
$iconsole = $session->getConsole();
$progress = $iconsole->reset();
} else if ($state == ‘PoweredOff‘) {
$progress = $machine->launchVMProcess($session->handle, "headless", "");
}
}
/*
* 模塊名稱:獲取vbox裏面所有虛擬機
* 參數說明:
* 作者:csl
*/
public function get_machines(){
$this->getConn();
$websessionManager = new IWebsessionManager($this->connection);
$virtualbox = $websessionManager->logon("", "");
$machines = $virtualbox->machines;
return $machines;
}
}
php管理虛擬機,通過代理連接