簡體   English   中英

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

[英]How do I use the 'dns-sd' command in a php shell_exec?

我正在嘗試編寫一個php腳本,可以掃描網絡中的任何mDNS記錄,並返回結果。

'dns-sd -B _roomcast-capi._tcp'

我正在研究OSx - 據我所知,這個命令不能在沒有安裝額外SW的情況下在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不是我最強的領域。

你可以看到我在終端運行命令時,我幾乎可以立即得到響應。

https://prnt.sc/n6fe9e

我注意到,當我在我的mac終端上運行此命令時,我必須使用Ctrl + C終止響應 - 這可能是shell_exec無法終止的原因嗎?

我設法讓這個工作,感謝@JensV指點我這個答案 - https://stackoverflow.com/a/7149229/4357255

<?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);
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM