1. 程式人生 > >php管理虛擬機,通過代理連接

php管理虛擬機,通過代理連接

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管理虛擬機,通過代理連接