是否可以使用 php 代码从虚拟机管理器检索信息?我尝试通过 exec 命令,但在浏览器中没有得到任何结果。请提供任何帮助来完成此任务。
我正在使用 Ubuntu 服务器 11.04 和 kvm 作为虚拟机管理程序。我已经安装了虚拟机管理器。
请不要建议安装任何工具。
答案1
从http://php.net/manual/en/function.exec.php:
您需要使用数组来获取输出。
因此,使用以下代码:
$result=[]; // Create an array
exec('your command line', &$result); // Remember the & before the result as it ***IS A REFERENCE***
//DO whatever with your result
问题是您没有将结果数组作为引用传递。
或者,使用shell_exec
,其中返回值是返回的所有内容:
$return=shell_exec($command_line);
您还可以使用反引号:
$result=`cmdline`
或者,使用popen(
:
使用以下命令创建一个新指针:
$handle = popen("/bin/ls", "r");
然后阅读:
$read = fread($handle);
最后结束:
pclose($handle);
它将阻止执行直到输出停止。
答案2
PHP 函数exec()
或shell_exec()
不会有帮助,因为 libvirt 以 root 模式执行,而 PHP 以www-data
用户身份执行。我们可以授予www-data
root 权限,但在这种情况下可能会出现一些安全问题。所以最好的方法是使用 libvirt-php API。例如,要在 php 中列出所有 VM:
<?php
$conn = libvirt_connect('null', false);
$doms = libvirt_list_domains($conn);
print_r($doms);
?>
参考:
如果 libvirt 正在监听 TCP 端口,此操作将顺利执行。要使 libvirt 监听 tcp 端口,此问题将有所帮助:我无法使用 libvirt 来监听 TCP