PHP DNS查找脚本未按预期执行shell命令并写入DNS循环结果
我想我已经接近这个剧本了。我现在只能将一行域名内容写入输出文件。理想情况下,我希望为返回的所有数组写出所有数组字段:PHP DNS查找脚本未按预期执行shell命令并写入DNS循环结果,php,shell,dns,Php,Shell,Dns,我想我已经接近这个剧本了。我现在只能将一行域名内容写入输出文件。理想情况下,我希望为返回的所有数组写出所有数组字段: function getDNS(){ if(file_exists($outputFile)){ unlink($outputFile); } $outputFile = 'DNS-Outp
function getDNS(){
if(file_exists($outputFile)){ unlink($outputFile);
}
$outputFile = 'DNS-Output.csv';
$inputFile = fopen('DNS-input.csv','r');
$output = NULL;
//make sure we loop through to end of file contents
$newOutput = 'Domain, IP Address, Exiration Date, Record Type, TTL, Cloud' . PHP_EOL;
$output .= $newOutput;
while (!feof($inputFile)) {
$line = fgets($inputFile, 4096);
$array = explode(",",$line);
$result = dns_get_record($array[0], DNS_A + DNS_SOA); // get DNS info
if ( ! is_array( $result )){
$results = explode(",",$result);
}
print_r($result);
$whois = shell_exec("whois " . $result[0]['ip'] . " | grep" . " NetName");
$whois = preg_split("/[\s,]+/", $whois);
if ( ! is_array( $whois )){
$result = explode(",",$whois);
}
//if array
if ( is_array($whois)){
$whois[0]['host'].", " . PHP_EOL; // Domain Name
//print_r($whois);
}
foreach ($whois as $record) {
$output .= $record;
/* $output .=
$record['host'].", " . // Domain Name
$record['ip'].", ". // IP Address
$record['type'].", ". // Type of Record
$record['minimum-ttl'].", ".PHP_EOL; // Minimum TTL
*/
}
file_put_contents($outputFile, $output); // Create CSV File
}
//file_put_contents($outputFile, $output); // Create CSV File
fclose($inputFile);
}
getDNS()
下面是输入csv文件中的一行示例,我正在对其进行查找
somedomain.COM,.com,9/14/06 19:03,9/14/12 19:03,Active,Public,Locked,"ns31.domaincontrol.com(), ns32.domaincontrol.com()",,
正在寻找将数组元素写入csv输出文件中相应列的最佳方法。获取whois时出错:
$whois = shell_exec("whois " . $array[0]['ip'] . " | grep" . " NetName");
应该是:
$whois = shell_exec("whois " . $result[0]['ip'] . " | grep" . " NetName");
修复后,我得到了正确的结果
在我看来,以下代码似乎是错误的:
if ( ! is_array( $result ))
$results = explode(",",$result);
应该是
if ( ! is_array( $result ))
$result = explode(",",$result);
写入输出时使用的第一维度不正确。dns_get_record()检索按该初始维度分组的多个dns记录,您将其视为一列 与其说是这样,不如说:
$whois[0]['host'].", " . PHP_EOL; // Domain Name
$whois[2]['ip'].", ". // IP Address
$whois[5]['type'].", ". // Type of Record
$result[1]['minimum-ttl'].", ". // Minimum TTL
$whois[1] . PHP_EOL; // Cloud
你想要这样的东西:
foreach ($whois as $record) {
$record['host'].", " . PHP_EOL; // Domain Name
$record['ip'].", ". // IP Address
$record['type'].", ". // Type of Record
$record['minimum-ttl'].", ".PHP_EOL // Minimum TTL
}
如果您的输入和输出文件是CSV,请使用
fgetcsv
和fputcsv
功能。就我而言,fgetcsv根本不起作用。我不知道为什么。这完全是不可靠的。但是我使用的fget方法非常有效,而且这不是我要问的实际问题。这些行应该做什么?他们不分配或打印$record
的字段。在最初的代码中,我怀疑它们都应该是$output
的一个大任务的一部分,但是有一个代码>在结束它之后,之后的所有内容都会被忽略。是的。我的错,它们是输出的重要任务。换句话说,output.=$record。。。。所以我觉得你的评论很有帮助。我知道我又错过了一个循环。但是,我现在只在输出文件中写入了一行。我将看看我是否可以用新的代码编辑这个问题,或者用现在更完整的代码打开一个新问题是否更合适。谢谢。我已经在whois上找到并修复了命令行错误。这个is_数组的观察令人困惑,因为我看不出我的代码和你的代码之间的区别。也许我累了…这是结果的“s”应该是结果