2012-08-28 48 views
5

Như bạn đã biết, phạm vi() chức năng có thể nhận được một phạm vi giữa số lượng và người kia,PHP Tạo IP Ranges

làm thế nào để làm điều tương tự với một IP
làm ví dụ ..

$range_one = "1.1.1.1"; 
$range_two = "1.1.3.5"; 
print_r(range($range_one, $range_two)); 

/* I want a result of : 
    1.1.1.1 
    1.1.2.2 
    1.1.3.3 
    1.1.3.4 
    1.1.3.5 
*/ 

Tôi đã nghĩ đến việc sử dụng hàm explode() để phát nổ "." và tách từng số rồi sử dụng phạm vi với mỗi số sau khi kết hợp chúng lại với nhau, có vẻ hơi phức tạp đối với tôi và tôi đoán có một phương pháp dễ dàng hơn để làm điều đó

Trả lời

8

Bạn có thể sử dụng ip2long để chuyển đổi các địa chỉ IP thành số nguyên. Dưới đây là một chức năng mà làm việc cho địa chỉ IPv4 cũ:

/* Generate a list of all IP addresses 
    between $start and $end (inclusive). */ 
function ip_range($start, $end) { 
    $start = ip2long($start); 
    $end = ip2long($end); 
    return array_map('long2ip', range($start, $end)); 
} 

$range_one = "1.1.1.1"; 
$range_two = "1.1.3.5"; 
print_r(ip_range($range_one, $range_two)); 
+0

Hoàn hảo !! Giúp tôi một tấn! Cảm ơn! –

3

Làm thế nào về điều này:

$range_one = "1.1.1.1"; 
$range_two = "1.1.3.5"; 
$ip1 = ip2long ($range_one); 
$ip2 = ip2long ($range_two); 
while ($ip1 <= $ip2) { 
    print_r (long2ip($ip1) . "\n"); 
    $ip1 ++; 

} 

Cập nhật:

BTW, sản lượng dự kiến ​​của bạn là không chính xác một loạt. Ví dụ: IP tiếp theo sau 1.1.1.11.1.1.2 và không phải 1.1.2.2.

+0

bạn có để xem kết quả chính mình, nó kết thúc với kết quả vô cùng thích và không thích làm thế nào tôi đã đề cập, cũng .. nó bỏ qua dãy thứ hai cho – Osa

+0

Xem cập nhật cho câu trả lời, nó không vô cùng. Sản lượng dự kiến ​​của bạn thiếu một số địa chỉ IP trong phạm vi. – jman

+0

yah tôi thấy điểm ngay bây giờ, tuyệt vời .. cảm ơn – Osa