[英]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不是我最強的領域。
你可以看到我在終端運行命令時,我幾乎可以立即得到響應。
我注意到,當我在我的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.