通过get_dns_record循环

时间:2014-10-23 18:51:11

标签: php arrays

下面简要介绍一下发生的问题以及问题所在...... $ _POST [' domain_list']是一个用户可以通过换行符分隔的域数组(因此在\ n上爆炸) 第一个var转储给了我:

array(3) { [0]=> string(11) "google.com " [1]=> string(17) "websolutions.com " [2]=> string(12) "facebook.com" } 

这就是我想要的 - 我在textarea中输入的3个主机名。

然后第一个foreach循环遍历该数组并将每个主机名分配给dns_get_record函数。

这导致我遇到的问题 - 内部的2个循环拉动IP和名称服务器,只拉取最后一个域。所以那些2 var转储看起来像:

array(5) { ["host"]=> string(12) "facebook.com" ["type"]=> string(1) "A" ["ip"]=> string(13) "173.252.120.6" ["class"]=> string(2) "IN" ["ttl"]=> int(900) } Hostname: facebook.com IP: 173.252.120.6
array(5) { ["host"]=> string(12) "facebook.com" ["type"]=> string(2) "NS" ["target"]=> string(17) "a.ns.facebook.com" ["class"]=> string(2) "IN" ["ttl"]=> int(172528) } Hostname: facebook.com NS: a.ns.facebook.com
array(5) { ["host"]=> string(12) "facebook.com" ["type"]=> string(2) "NS" ["target"]=> string(17) "b.ns.facebook.com" ["class"]=> string(2) "IN" ["ttl"]=> int(172528) } Hostname: facebook.com NS: b.ns.facebook.com

出于某种原因,主循环不像我期望的那样工作,我期望它循环遍历整个$ domain数组(你可以在第一个var_dump中看到它,它有所有3个域在数组中)

if ( isset( $_POST['domain_list'] ) ) {

    $domain = $_POST['domain_list'];
    $domain = explode( "\n", $domain );
    var_dump( $domain );

    foreach ( $domain as $entry ) {
        $a_record = dns_get_record( $entry, DNS_A );
        $nameservers = dns_get_record( $entry, DNS_NS );

        foreach($a_record as $arr1) {
            var_dump($arr1);
            echo 'Hostname: '.$arr1['host'].' IP: '.$arr1['ip'] . '<br>';
        }

        foreach($nameservers as $arr2) {
            var_dump($arr2);
            echo 'Hostname: '.$arr2['host'].' NS: '.$arr2['target'] . '<br>';
        }
    }
} else {
    echo "failed";
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

嗯,评论是正确的 - 我的代码实际上正常工作。我没有得到相同结果的原因是我在textarea的断线处爆炸的方式。

为了正确获取textarea中换行符所分隔的值,我更新了这一行:

$domain = explode( "\n", $domain );

$domain = explode( "\r\n", $domain );

令人惊讶的是,如此简单的事情可以让人如此疯狂!