Chyba znalazłem coś (wypróbowane na oknach, PHP 5.3.0, z CLI):
Kiedy to zrobić:
$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));
}
uzyskać to:
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)
Żaden z testów nie daje "prawdziwego" :-(
pl I spróbować z innej domeny:
$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));
}
(testowane na tym, bo wiem, co na niej jest, i chciał przetestować dla konkretnego pomysłu ^^)
uzyskać:
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)
Tak więc, funkcja wydaje się działać ... Przynajmniej niektóre domeny!
Dlaczego to możliwe?
Być może jest coś, czego nie skonfigurowano na serwerze DNS test.com? I to coś jest skonfigurowane na pascal-martin.fr?
nie wiem systemów DNS na tyle dobrze, aby powiedzieć :-(
tu kilka wyjść z niektórych poleceń (z Linuksem):
$ 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
oraz:
$ 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
Wydaje się być prawie taki sam ... więc nie ma problemu?
Spróbujmy jeszcze jeden:
$ 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.
oraz:
$ host test.com
test.com has address 204.12.0.50
Cóż, tu jest różnica! Czy problem może wynikać z faktu, że test.com rozwiązuje problem z adresem IP, ale nie ma wpisu MX? Lub coś w tym stylu ?
Może to jest: kiedy używać dns_get_record
do testowania MX wpisów DNS, nie mam wynik dla test.com:
array(0) {
}
Ale mam dwa do 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)
}
}
Cóż, ja naprawdę nie wiem „dlaczego” ... Ale przynajmniej oto kilka wskazówek ...
Nie mogę znaleźć niczego więcej w dokumentacji PHP; tak, nie wiem, czy to zamierzone zachowanie lub nie :-(
W każdym razie: powodzenia
EDIT: dobrze, że może być naprawdę jakiś problem pod okna, bo gdy próbuję z systemem Linux, otrzymuję:
Dla 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)
A dla 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)
tak, to nie to samo (zawsze prawdziwe lub fałszywe zawsze) mam na oknach ...
Może istnieje coś takiego, na oknach , funkcja zawsze szuka wpisu MX, nie biorąc pod uwagę drugiego parametru?
(Tylko naprawdę dzikie domysły ^^)
Czy to działa dla innych typów rekordów DNS? –
Czy dostaję plusów, że ludzie mają ten sam problem? – user121196
nie, w rzeczywistości próbowałem żadnych: \t echo ("test.com dns check:". Checkdnsrr ("test.com", "any")); zwraca false – user121196