2009-08-06 47 views
5

Tôi đang sử dụng checkdnsrr trên Windows với PHP 5.3 và nó luôn trả về false. Tuy nhiên,checkdnsrr luôn trả về false trên windows

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 
+0

Tính năng này có hoạt động đối với mọi loại bản ghi DNS khác không? –

+0

có điểm cộng tôi có nghĩa là mọi người đang nhận được cùng một vấn đề? – user121196

+0

không, trên thực tế tôi đã thử bất kỳ: \t echo ("test.com dns kiểm tra:". Checkdnsrr ("test.com", "BẤT K" ")); trả về false – user121196

Trả lời

3

Tôi đoán tôi tìm thấy một cái gì đó (thử trên cửa sổ, PHP 5.3.0, từ CLI):

Khi tôi làm điều này:

$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)); 
} 

tôi có được điều này:

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) 

Vì vậy, không có thử nghiệm nào cho "true" :-(


Nhưng wh en Tôi thử với tên miền khác:

$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)); 
} 

(thử nghiệm trên một này bởi vì tôi biết những gì trên nó, và muốn kiểm tra cho một ý tưởng cụ thể ^^)

tôi nhận được:

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) 

Vì vậy, chức năng dường như đang hoạt động ... Đối với ít nhất một số miền!


Tại sao điều đó có thể?

Có thể có điều gì đó không được định cấu hình trên máy chủ DNS của test.com? Và cái gì đó được cấu hình trên pascal-martin.fr?

Tôi không biết các hệ thống DNS cũng đủ để nói :-(


Dưới đây là một vài kết quả đầu ra từ một số lệnh (từ 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 

và:

$ 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 

Dường như gần như giống nhau ... vậy không phải là vấn đề ở đây?

Hãy thử một cách khác:

$ 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. 

Và:

$ host test.com 
test.com has address 204.12.0.50 

Vâng, ở đây, có một sự khác biệt! Có thể vấn đề được gây ra bởi thực tế là test.com phân giải thành một IP, nhưng không có mục MX? Hoặc thứ gì đó giống thế này ?


Có lẽ nó là: khi tôi sử dụng dns_get_record để kiểm tra mục DNS MX, tôi không có kết quả cho test.com:

array(0) { 
} 

Nhưng tôi có hai cho 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) 
    } 
} 


Vâng, tôi thật sự không biết "tại sao" ... Nhưng ít nhất đây là một vài gợi ý ...

Tôi không thể tìm thấy bất kỳ điều gì khác trong tài liệu php; như vậy, tôi không biết nếu nó có ý định hành vi hay không :-(

Dù sao: may mắn



EDIT: tốt, có thể thực sự có một số loại vấn đề dưới cửa sổ, bởi vì khi tôi cố gắng với Linux, tôi nhận được:

Đối với 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) 

Và, cho 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) 

Vì vậy, không phải là điều tương tự (luôn luôn đúng hoặc luôn luôn sai) tôi trên cửa sổ ...

Có thể có một cái gì đó như thế nào, trên cửa sổ , hàm luôn tìm kiếm mục nhập MX, không tính đến tham số thứ hai?
(Chỉ là một dự đoán thực sự hoang dã ^^)

+0

đó có thể là lý do (sẽ là ngớ ngẩn nếu có). Tôi đoán tôi sẽ phải đào sâu vào mã của dns_get_record trên cửa sổ để tìm ra ... câu trả lời tuyệt vời! cảm ơn! – user121196

+0

Bạn được chào đón! Chúc may mắn với điều đào! –

0

Chức năng này không có sẵn trên các phiên bản của PHP trên cửa sổ trước 5.3.0

Xem changelog tại php.net's manual page for checkdnsrr để biết thông tin. Ngoài ra kiểm tra các ý kiến ​​để thay thế.

+1

Nhưng anh ta đang sử dụng PHP 5.3 –

+1

Hmm ... vì vậy anh ta ... đang gửi một lỗi? – Mez

Các vấn đề liên quan