【问题标题】:PHP - Retrieving IPs from host namesPHP - 从主机名中检索 IP
【发布时间】:2019-04-22 06:37:05
【问题描述】:

我正在从表字段中检索值并将字符串附加到它以获取主机名列表。然后我想遍历所有主机名并返回每个主机名的 IP。

以下代码获取我的主机名:

$sql = "select * from table order by col1 asc";

$q = mysql_query($sql) or die(mysql_error() ." " . $sql);

// Loop through table and append .zzz to each col1.
while ($r = mysql_fetch_array($q)) {

    $host_name = $r['col1']. ".zzz" . " ";

    //echo $host_name;
}

上面的代码可以正常工作,但我不确定如何检索每个主机名的 IP。我一直在尝试 gethostbyname 但无法使其正常工作。我知道我必须遍历主机名值。我会使用 foreach 循环吗?我已经尝试过了,但无法让它工作。谁能给我一些指点。

我尝试了以下方法,但没有返回任何内容:

$host_name_ip = $host_name;
foreach ($host_name_ip as $name) {
    $ip = gethostbyname($name);
    echo '<li>' . $ip. '</li>';
}

我也试过这个......再次,没有:

foreach($host_name as $url) {
    $ip = gethostbyname(trim($url)); 
}

echo $ip;

谢谢。 :)

【问题讨论】:

    标签: php ip host gethostbyname


    【解决方案1】:

    您在初始循环中覆盖了$host_name 的值。把它改成一个数组,你的 foreach 就可以工作了。

    while ($r = mysql_fetch_array($q)) {
        $host_name[] = $r['col1']. ".zzz";
    }
    

    要在循环中打印主机名及其地址,请使用:

    foreach ($host_name_ip as $name) {
        $ip = gethostbyname($name);
        echo '<li>' . $name . ' is at address ' . $ip. '</li>';
    }
    

    您甚至不需要将名称存储在数组中。只需在 while 循环中执行您需要的所有操作即可。

    while ($r = mysql_fetch_array($q)) {
        $ip = gethostbyname($r['col1']. ".zzz");
        echo '<li>' . $r['col1']. '.zzz' . ' is at address ' . $ip. '</li>';
    }
    

    【讨论】:

    • 谢谢。它现在向页面返回值,但返回主机名而不是 IP。
    • 您数据库的col1 列中有什么内容?如果它是主机名,请删除我的答案中 = 左侧的 ] 之后的所有内容(当然留下 ;)。
    • col1 中每行有 5 个字母变量。附加“zzz”给了我我的主机名。 (zzz 只是一个示例)
    • OK 然后删除.zzz 之后的. " "。你不再需要/想要它了。
    • 我仍然有一些问题。它返回了我想要的 IP,但我希望能够将每个主机名加上每个相应的 IP 打印到页面。我似乎无法让这个工作。在我删除 ." " 后,它不会打印主机名,如您上次评论中所建议的那样。此外,当 IP 显示在页面上时,每个 ip 前面都会显示“Array”一词。例如,我想查看“主机名 - IP”,但现在我只看到“Array111.111.11.11”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2016-10-23
    • 2015-07-08
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多