2013-10-14 30 views
1

我需要一個例程來同時做2個或更多的DNS請求,但只使用第一/最快的結果。PHP分叉,並從孩子得到結果

我如何從兒童的回來answar所以我只得到一個結果?

$pid = pcntl_fork(); 

if ($pid == -1) die("could not fork"); 

if ($pid) { 

    //parent 

} else { 

    $pid2 = pcntl_fork(); 

    if ($pid2 == -1) die("could not fork"); 

    if ($pid2) { 

    //parent-child 

    exec("/usr/bin/dig @8.8.8.8 $name A +short +time=1+tries=1",$ips_array,$digreturn); 

    } else { 

    exec("/usr/bin/dig @8.8.4.4 $name A +short +time=1 +tries=1",$ips_array,$digreturn); 

    } 

} 

print_r ($ips_array); 

這將返回2倍的答案,如果兩個請求返回

+0

當您fork時,每個進程都有自己的所有變量副本,包括'$ ips_array()'。您需要使用管道將結果傳回原始父進程,這可以將它們合併在一起。 – Barmar

回答

1

我建議看看socket_create_pair()

在PHP手冊中是一​​個非常簡短的例子,它是fork()父進程和子進程之間的進程間通信(IPC)。


使用serialize()和unserialize()的Abd您甚至可以傳輸像數組這樣的複雜數據類型......