Hướng dẫn php get root domain from url - php lấy tên miền gốc từ url

Các miền cấp cao nhất và miền cấp hai có thể dài 2 ký tự nhưng tên miền phụ đã đăng ký phải dài ít nhất 3 ký tự.

Chỉnh sửa: Vì nhận xét của PJV, tôi đã học tên miền Úc là một ngoại lệ vì chúng cho phép 5 TLD là SLD (com, net, org, asn, id) Ví dụ: somedomain.com.au. Tôi đoán com.au là tên miền được kiểm soát trên toàn quốc "chia sẻ". Vì vậy, về mặt kỹ thuật, "com.au" vẫn sẽ là "miền cơ sở", nhưng điều đó không hữu ích.

EDIT: Có 47.952 tên miền ba chữ cái có thể (mẫu: [A-Za-Z0-9] Chỉ với 8 trong số các TLD phổ biến nhất (com, org, v.v.), chúng tôi có 383.616 khả năng - thậm chí không thêm vào toàn bộ phạm vi của TLD. Tên miền 1 chữ cái và 2 chữ cái vẫn còn tồn tại, nhưng không hợp lệ trong tương lai.

Trong Google.com - "Google" là một tên miền phụ của "com"

Trong google.co.uk-"Google" là tên miền phụ của "CO", do đó là tên miền phụ của "Vương quốc Anh" hoặc miền cấp hai thực sự, vì "CO" cũng là miền cấp cao nhất hợp lệ

Trong www.google.com - "www" là một tên miền phụ của "Google" là tên miền phụ của "com"

"Co.uk" không phải là máy chủ hợp lệ vì không có tên miền hợp lệ

Đi với giả định đó, chức năng này sẽ trả về "dựa trên" thích hợp trong hầu hết các trường hợp, mà không yêu cầu "bản đồ URL".

Nếu bạn tình cờ là một trong những trường hợp hiếm hoi, có lẽ bạn có thể sửa đổi điều này để đáp ứng các nhu cầu cụ thể ...

EDIT: Bạn phải truyền chuỗi miền dưới dạng URL với giao thức của nó (http: //, ftp: //, v.v.) hoặc parse_url() sẽ không coi đó là URL hợp lệ (trừ khi bạn muốn sửa đổi mã để hoạt động khác nhau)

function basedomain( $str = '' )
{
    // $str must be passed WITH protocol. ex: http://domain.com
    $url = @parse_url( $str );
    if ( empty( $url['host'] ) ) return;
    $parts = explode( '.', $url['host'] );
    $slice = ( strlen( reset( array_slice( $parts, -2, 1 ) ) ) == 2 ) && ( count( $parts ) > 2 ) ? 3 : 2;
    return implode( '.', array_slice( $parts, ( 0 - $slice ), $slice ) );
}

Nếu bạn cần sử dụng chính xác fopen hoặc curl để mở URL này: http://data.iana.org/tld/tlds-alpha-by-domain.txt

Sau đó đọc các dòng vào một mảng và sử dụng nó để so sánh các phần miền

Chỉnh sửa: Để cho phép các miền Úc:

function au_basedomain( $str = '' )
{
    // $str must be passed WITH protocol. ex: http://domain.com
    $url = @parse_url( $str );
    if ( empty( $url['host'] ) ) return;
    $parts = explode( '.', $url['host'] );
    $slice = ( strlen( reset( array_slice( $parts, -2, 1 ) ) ) == 2 ) && ( count( $parts ) > 2 ) ? 3 : 2;
    if ( preg_match( '/\.(com|net|asn|org|id)\.au$/i', $url['host'] ) ) $slice = 3;
    return implode( '.', array_slice( $parts, ( 0 - $slice ), $slice ) );
}

Ghi chú bổ sung quan trọng: Tôi không sử dụng chức năng này để xác nhận các miền. Đó là mã chung Tôi chỉ sử dụng để trích xuất miền cơ sở cho máy chủ mà nó đang chạy từ toàn cầu $_SERVER['SERVER_NAME'] để sử dụng trong các tập lệnh nội bộ khác nhau. Xem xét tôi chỉ từng làm việc trên các trang web trong Hoa Kỳ, tôi chưa bao giờ gặp phải các biến thể của Úc mà PJV hỏi. Nó là tiện dụng cho việc sử dụng nội bộ, nhưng nó là một chặng đường dài từ quá trình xác thực miền hoàn chỉnh. Nếu bạn đang cố gắng sử dụng nó theo cách như vậy, tôi khuyên bạn không nên vì quá nhiều khả năng để phù hợp với các miền không hợp lệ.

1

2

/*

3

 Get Root Domain (or TLD) from a URL with PHP

4

 http://www.beliefmedia.com/root-domain-url-php

5

*/

6

7

8

9

  $domain = isset($pieces['host']) ? $pieces['host'] : '';$domain = isset($pieces['host']) ? $pieces['host'] : '';

10

& nbsp; & nbsp; if & nbsp; (preg_match ('/(? P [a-z0-9] [a-z0-9 \-] {1,63} \.i ', & nbsp; $ domain, & nbsp; $ m)) & nbsp; {{ (preg_match('/(?P[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $m)) {

11

    return ($tld === true) ? substr($m['domain'], ($pos = strpos($m['domain'], '.')) !== false ? $pos + 1 : 0) : $m['domain']; ($tld === true) ? substr($m['domain'], ($pos = strpos($m['domain'], '.')) !== false ? $pos + 1 : 0) : $m['domain'];

12

  }}

13

 return false; false;

14

}

15

16

/* Usage: returns 'beliefmedia.com' */

17

echo beliefmedia_get_domain("http://something.something.beliefmedia.com/directory/filename.php"); beliefmedia_get_domain("http://something.something.beliefmedia.com/directory/filename.php");

18

19

/* Usage: returns 'com.au' */

20

// echo beliefmedia_get_domain("http://something.something.beliefmedia.com.au/directory/filename.php", $tld = true);