首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php shell_exec中使用'dns-sd‘命令?

如何在php shell_exec中使用'dns-sd‘命令?
EN

Stack Overflow用户
提问于 2019-04-02 13:51:04
回答 1查看 264关注 0票数 0

我正在尝试编写一个php脚本,它可以扫描网络中的任何mDNS记录,并返回结果。

代码语言:javascript
复制
'dns-sd -B _roomcast-capi._tcp'

我正在OSx上工作-据我所知,如果没有安装额外的SW,这个命令就不能在windows上工作。

问题是这个unix命令不适用于shell_exec或任何类似的东西。PHP只是挂起,我只能等待一个不存在的响应。

我尝试通过shell_exec()、exec()、system()、proc_open()和passthru()运行这个命令--不知道它们的不同之处,但它们都有相同的结果。我也尝试过重定向STDERR输出,这似乎没有什么区别。

我的一次尝试..。

代码语言:javascript
复制
  $p = shell_exec("dns-sd -B _roomcast-capi._tcp 2>&1");
  echo($p);

又一次尝试..。

代码语言:javascript
复制
  $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不是我最擅长的领域。

您可以在这里看到,当我在终端中运行命令时,我几乎可以立即得到响应。

https://prnt.sc/n6fe9e

我注意到,当我在mac上的终端上运行这个命令时,我必须用Ctrl+C终止响应--这是否是shell_exec不终止的原因呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-02 16:00:05

我成功地完成了这个任务,感谢@JensV为我提供了这个答案-- https://stackoverflow.com/a/7149229/4357255

代码语言:javascript
复制
<?php
  $proc = proc_open('dns-sd -B _roomcast-capi._tcp', array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w')), $pipes);
  echo fread($pipes[1], 999999);
  $proc_status=proc_get_status($proc);
  $pid=trim(exec('ps h -o pid  --ppid '.$proc_status['pid']));
  exec('kill -s 9 '.$proc_status['pid']);
  exec('gdb -p '.$pid.' --batch -x /usr/share/gdb_null_descr');
  array_map('fclose',$pipes);
  proc_close($proc);
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55476510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档