обнаружение пустых дочерних массивов — неверный foreach

Я пытаюсь получить записи NS и A для списка доменов, которые у меня есть в таблице.

Я начал писать это:

$domains = GetDomainsForDNS();

foreach ($domains as $domain){
$domain_id = $domain[0];
$domain = $domain[1];
$dns_records = dns_get_record($domain, DNS_NS + DNS_A);

echo $domain;
foreach($dns_records as $dns_record){
if (!$dns_record){
//var_dump($dns_record);
echo "empty";
}
}
}

$ domains — это идентификатор и домены из таблицы, которую я хочу проверить.

Предупреждения, которые я получаю:

Предупреждение: неверный аргумент предоставлен для foreach () для более позднего foreach

А также

Предупреждение: dns_get_record (): DNS-запрос не выполнен для dns_get_record

Судя по всему, я получаю эти ошибки, когда dns_get_record () ничего не находит.

Я пытаюсь пометить эти домены как проблему в базе данных, поэтому мне нужен метод для их обнаружения. Я пробовал empty () и другие методы, чтобы обнаружить их, но все, что я делаю, вызывает предупреждения php выше.

Это потому, что это многомерный массив? Как мне сделать это правильно?

Спасибо

1

Решение

Поскольку формат исходного массива не указан, я предположил, что он будет похож на массив, показанный ниже — кажется, работает нормально и очень быстро возвращает записи DNS для дальнейшей обработки

function GetDomainsForDNS(){
/* example dummy data */
return array(
array(1,'stackoverflow.com'),
array(2,'google.com'),
array(3,'microsoft.com'),
array(4,'yellow-banana.com'),
array(5,'yahoo.com'),
array(6,'blue-velvet-caulifower.org')
);
}


$domains = GetDomainsForDNS();
$dns = array();


foreach( $domains as $arr ){
try{
$id = $arr[0];
$domain = $arr[1];

/* suppress potential errors */
$records = @dns_get_record( $domain, DNS_NS + DNS_A );

/* If the query failed, throw a catchable exception */
if( empty( $records ) ) throw new Exception( sprintf( 'DNS Query failed for %s', $domain ) );

/* add records to output array or later use */
$dns[ $domain ]=$records;

}catch( Exception $e){
/* display warnings */
printf( '%s<br />', $e->getMessage() );
/* move to the next domain to check */
continue;
}
}

printf( '<pre>%s</pre>',print_r( $dns, true ) );

Выход которого будет похож на

DNS Query failed for yellow-banana.com
DNS Query failed for blue-velvet-caulifower.org
Array
(
[stackoverflow.com] => Array
(
[0] => Array
(
[host] => stackoverflow.com
[type] => A
[ip] => 151.101.193.69
[class] => IN
[ttl] => 1
)
............ etc
0

Другие решения

Я думаю, хотя, не зная тестового домена, вы получаете возвращаемое значение false

//check returned values not falsey
if ($dns_records) {
// as the returned value is not false
foreach ($dns_records as $dns_record) {
// $dns_record is an associative array.
}
}
0

По вопросам рекламы [email protected]