Sử dụng ip2long()
để chuyển đổi dấu chấm thập phân đến một địa chỉ IP thực. Sau đó, bạn có thể làm phạm vi dễ dàng.
Chỉ cần thực hiện ip2long()
trên phạm vi cao và thấp để nhận giá trị, sau đó sử dụng các giá trị đó làm hằng số trong mã của bạn.
Nếu bạn đã quen thuộc với subnet mặt nạ, bạn có thể làm điều đó như thế này:
// Deny 10.12.*.*
$network = ip2long("10.12.0.0");
$mask = ip2long("255.255.0.0");
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if (($network & $mask) == ($ip & $mask)) {
die("Unauthorized");
}
Hoặc nếu bạn đã quen thuộc với định dạng này 10.12.0.0/16
:
// Deny 10.12.*.*
$network = ip2long("10.12.0.0");
$prefix = 16;
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if ($network >> (32 - $prefix)) == ($ip >> (32 - $prefix)) {
die("Unauthorized");
}
Bạn có thể bật những thành chức năng và có mã rất dễ quản lý, giúp dễ dàng thêm địa chỉ IP và tùy chỉnh phạm vi.
Nguồn
2010-05-19 22:32:52
hehe, tôi ngạc nhiên rằng ' strpos' ở đây hoạt động nhanh hơn 'substr' – zerkms
@zerkms nó không thực sự đáng ngạc nhiên -' strpos' có thể trở lại ngay lập tức nếu thử nghiệm thất bại, và không phải làm bất kỳ chuỗi sao chép hoặc phân bổ. Ngoài ra, tôi chỉ muốn lưu ý rằng hành vi thay đổi nếu bạn chuyển '===' thành '==', vì vậy đừng làm vậy. Sử dụng ba dấu bằng. – gnud
@gnud: cho chuỗi dài strpos sẽ chậm hơn, chỉ vì nó nên lặp qua toàn bộ chuỗi để tìm kiếm kim. và tôi biết sự khác biệt của '===' và '==' là gì. – zerkms