checkdnsrr всегда возвращает false на окнах - PullRequest
6 голосов
/ 07 августа 2009

Я использую checkdnsrr в Windows с PHP 5.3 и всегда возвращает false.

dns_get_record, однако, работает.

echo ("test.com dns check: ". checkdnsrr("test.com","NS")); //false!!
print_r(dns_get_record("test.com",DNS_NS)); //returns the right data

Ответы [ 2 ]

3 голосов
/ 07 августа 2009

Наверное, я что-то нашел (пробовал на windows, PHP 5.3.0, из CLI):

Когда я делаю это:

$tests = array('A', 'MX', 'NS', 'SOA', 'PTR', 'CNAME', 'AAAA', 'A6', 'SRV', 'NAPTR', 'TXT', 'ANY');
foreach ($tests as $type) {
  echo "  Type = $type : ";
  var_dump(checkdnsrr("test.com", $type));
}

Я понял:

C:\bin\php-5.3\tests>c:\bin\php-5.3\php.exe test-dns.php
bool(true)
test.com dns check:
  Type = A : bool(false)
  Type = MX : bool(false)
  Type = NS : bool(false)
  Type = SOA : bool(false)
  Type = PTR : bool(false)
  Type = CNAME : bool(false)
  Type = AAAA : bool(false)
  Type = A6 : bool(false)
  Type = SRV : bool(false)
  Type = NAPTR : bool(false)
  Type = TXT : bool(false)
  Type = ANY : bool(false)

Итак, ни один из тестов не дает «истину»: - (


Но когда я пытаюсь с другим доменом:

$tests = array('A', 'MX', 'NS', 'SOA', 'PTR', 'CNAME', 'AAAA', 'A6', 'SRV', 'NAPTR', 'TXT', 'ANY');
foreach ($tests as $type) {
  echo "  Type = $type : ";
  var_dump(checkdnsrr("pascal-martin.fr", $type));
}

(проверено на этом, потому что я знаю, что на нем, и хотел проверить на конкретную идею ^^)

Я получаю:

C:\bin\php-5.3\tests>c:\bin\php-5.3\php.exe test-dns.php
bool(true)
test.com dns check:
  Type = A : bool(true)
  Type = MX : bool(true)
  Type = NS : bool(true)
  Type = SOA : bool(true)
  Type = PTR : bool(true)
  Type = CNAME : bool(true)
  Type = AAAA : bool(true)
  Type = A6 : bool(true)
  Type = SRV : bool(true)
  Type = NAPTR : bool(true)
  Type = TXT : bool(true)
  Type = ANY : bool(true)

Итак, функция работает ... По крайней мере, для некоторых доменов!


Почему это может быть?

Может быть, на DNS-сервере test.com что-то не настроено? А что-то настроено на pascal-martin.fr?

Я недостаточно хорошо знаю системы DNS, чтобы сказать: - (


Вот пара выводов некоторых команд (из Linux):

$ dig pascal-martin.fr

; <<>> DiG 9.5.1-P2 <<>> pascal-martin.fr
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22164
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;pascal-martin.fr.              IN      A

;; ANSWER SECTION:
pascal-martin.fr.       86400   IN      A       213.186.33.2

;; Query time: 29 msec
;; SERVER: 212.27.40.241#53(212.27.40.241)
;; WHEN: Fri Aug  7 00:00:47 2009
;; MSG SIZE  rcvd: 50

и:

$ dig test.com

; <<>> DiG 9.5.1-P2 <<>> test.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62572
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;test.com.                      IN      A

;; ANSWER SECTION:
test.com.               7200    IN      A       204.12.0.50

;; Query time: 136 msec
;; SERVER: 212.27.40.241#53(212.27.40.241)
;; WHEN: Fri Aug  7 00:00:51 2009
;; MSG SIZE  rcvd: 42

Кажется, почти то же самое ... так что не проблема здесь?

Давайте попробуем еще один:

$ host pascal-martin.fr
pascal-martin.fr has address 213.186.33.2
pascal-martin.fr mail is handled by 100 mxb.ovh.net.
pascal-martin.fr mail is handled by 1 mx0.ovh.net.

А:

$ host test.com
test.com has address 204.12.0.50

Ну, здесь есть разница! Может ли проблема быть вызвана тем, что test.com разрешает IP, но не имеет записи MX? Или как то так?


Может быть, это так: когда я использую dns_get_record для проверки записей DNS MX, у меня нет результата для test.com:

array(0) {
}

Но у меня есть два для pascal-martin.fr:

array(2) {
  [0]=>
  array(6) {
    ["host"]=>
    string(16) "pascal-martin.fr"
    ["type"]=>
    string(2) "MX"
    ["pri"]=>
    int(100)
    ["target"]=>
    string(11) "mxb.ovh.net"
    ["class"]=>
    string(2) "IN"
    ["ttl"]=>
    int(14481)
  }
  [1]=>
  array(6) {
    ["host"]=>
    string(16) "pascal-martin.fr"
    ["type"]=>
    string(2) "MX"
    ["pri"]=>
    int(1)
    ["target"]=>
    string(11) "mx0.ovh.net"
    ["class"]=>
    string(2) "IN"
    ["ttl"]=>
    int(14481)
  }
}


Ну, я действительно не знаю, "почему" ... Но, по крайней мере, вот несколько указателей ...

Я не могу найти ничего другого в документации php; Итак, я не знаю, предполагаемое ли это поведение: - (

В любом случае: удачи!



РЕДАКТИРОВАТЬ: ну, может действительно быть какая-то проблема под Windows, потому что когда я пытаюсь с Linux, я получаю:

Для test.com:

$ php temp.php
  Type = A : bool(true)
  Type = MX : bool(false)
  Type = NS : bool(true)
  Type = SOA : bool(true)
  Type = PTR : bool(false)
  Type = CNAME : bool(false)
  Type = AAAA : bool(false)
  Type = A6 : bool(false)
  Type = SRV : bool(false)
  Type = NAPTR : bool(false)
  Type = TXT : bool(false)
  Type = ANY : bool(true)

А для pascal-martin.fr:

$ php temp.php
  Type = A : bool(true)
  Type = MX : bool(true)
  Type = NS : bool(true)
  Type = SOA : bool(true)
  Type = PTR : bool(false)
  Type = CNAME : bool(false)
  Type = AAAA : bool(false)
  Type = A6 : bool(false)
  Type = SRV : bool(false)
  Type = NAPTR : bool(false)
  Type = TXT : bool(false)
  Type = ANY : bool(true)

Значит, не одно и то же (всегда верно или всегда ложно) Я попал в Windows ...

Может быть там что-то вроде, на windows, функция всегда ищет запись MX, не учитывая второй параметр?
(Просто очень дикое предположение ^^)

0 голосов
/ 07 августа 2009

Эта функциональность недоступна в версиях PHP на Windows до 5.3.0

.

См. Список изменений на странице справки php.net для checkdnsrr для информации. Также проверьте комментарии на предмет замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...