【发布时间】:2019-04-02 13:51:04
【问题描述】:
我正在尝试编写一个 php 脚本,它可以扫描网络以查找任何 mDNS 记录,并返回结果。
'dns-sd -B _roomcast-capi._tcp'
我正在使用 OSx - 据我了解,如果不安装额外的软件,此命令在 Windows 上不起作用。
问题是这个 unix 命令不能与 shell_exec 或类似的东西一起工作。PHP 只是挂起,我在等待一个不存在的响应。
我尝试通过 shell_exec()、exec()、system()、proc_open() 和 passthru() 运行命令 - 不知道它们的不同之处,但它们都有相同的结果.. 我也尝试过重定向 STDERR 输出,但这似乎没有什么不同。
我的尝试之一..
$p = shell_exec("dns-sd -B _roomcast-capi._tcp 2>&1");
echo($p);
又一次尝试……
$descspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("file", "error-output.txt", "a")
);
$process = proc_open('dns-sd -B _roomcast-capi._tcp', $descspec, $pipes);
foreach($pipes as $pipe) {
var_dump($pipe);
// echo "$process<br />";
}
我可以在这里列出我的其余尝试,但老实说,它们可能全都错了。PHP 不是我最擅长的领域。
你可以看到,当我在终端运行命令时,我几乎可以立即得到响应。
我注意到,当我在我的 Mac 上的终端中运行此命令时,我必须使用 Ctrl+C 终止响应 - 这可能是 shell_exec 没有终止的原因吗?
【问题讨论】:
-
您对不终止的评论,这正是原因。您也从未提及运行 php 脚本时实际发生的情况(我假设它挂起?)
-
是的,抱歉,脚本只是挂起,我没有任何回应。你知道我有什么方法可以强制它终止吗?
-
您是否希望命令自行终止?
-
这可能会有所帮助:stackoverflow.com/a/6144213/2232127
-
是的,我想要它——我需要从中获取结果。无论这是否是我可以在执行后调用“x 秒”的方法,以终止并返回结果。或者我还能做些什么?
标签: php shell-exec mdns