或者,使用popen(:

或者,使用popen(:

在此处输入图片描述

是否可以使用 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-dataroot 权限,但在这种情况下可能会出现一些安全问题。所以最好的方法是使用 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

相关内容