Skip to content

Commit f895396

Browse files
committed
- fix bug: #1
- improvement for php8.4 - add doc comment phpstan & readabilities improvement
1 parent 13a2a2d commit f895396

File tree

1 file changed

+61
-11
lines changed

1 file changed

+61
-11
lines changed

src/Util/CIDR.php

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424

2525
class CIDR
2626
{
27+
/**
28+
* Normalize ip6 address
29+
*
30+
* @param string $ip ip address
31+
* @return string|null normalized ip address
32+
*/
2733
public static function normalizeIp6(string $ip) :?string
2834
{
2935
if (!str_contains($ip, ':')) {
@@ -35,6 +41,12 @@ public static function normalizeIp6(string $ip) :?string
3541
return implode(':', str_split(bin2hex($bin), 4));
3642
}
3743

44+
/**
45+
* Normalize ip4 address
46+
*
47+
* @param string $arg ip address
48+
* @return string|null normalized ip address
49+
*/
3850
public static function normalizeIp4(string $arg): ?string
3951
{
4052
$arg = trim($arg);
@@ -66,6 +78,8 @@ public static function normalizeIp4(string $arg): ?string
6678
}
6779

6880
/**
81+
* Convert ip4 cidr to range
82+
*
6983
* @param string $cidr
7084
* @return ?array{0:string, 1:string}
7185
*/
@@ -87,13 +101,21 @@ public static function ip4CidrToRange(string $cidr): ?array
87101
return null;
88102
}
89103
$range = (int) $range;
90-
return [
91-
long2ip((ip2long($ip)) & ((-1 << (32 - $range)))),
92-
long2ip((ip2long($ip)) + pow(2, (32 - $range)) - 1)
93-
];
104+
$ipLong = ip2long($ip);
105+
if ($ipLong === false) {
106+
return null;
107+
}
108+
$first = long2ip(($ipLong) & ((-1 << (32 - $range))));
109+
$last = long2ip(($ipLong) + pow(2, (32 - $range)) - 1);
110+
if (!$first || !$last) {
111+
return null;
112+
}
113+
return [$first, $last];
94114
}
95115

96116
/**
117+
* Convert ip6 cidr to range
118+
*
97119
* @param string $cidr
98120
* @return ?array{0:string, 1:string}
99121
*/
@@ -145,17 +167,24 @@ public static function ip6cidrToRange(string $cidr) : ?array
145167
}
146168

147169
/**
170+
* Convert cidr to range
171+
*
148172
* @param string $cidr
149173
* @return ?array{0:string, 1:string}
150174
*/
151175
public static function cidrToRange(string $cidr) : ?array
152176
{
153-
if (str_contains($cidr, ':')) {
154-
return self::ip6cidrToRange($cidr);
155-
}
156-
return self::ip4cidrToRange($cidr);
177+
return str_contains($cidr, ':')
178+
? self::ip6CidrToRange($cidr)
179+
: self::ip4CidrToRange($cidr);
157180
}
158181

182+
/**
183+
* Normalize ip address
184+
*
185+
* @param string $ip
186+
* @return string|null
187+
*/
159188
public static function normalize(string $ip): ?string
160189
{
161190
$ip = trim($ip);
@@ -168,32 +197,52 @@ public static function normalize(string $ip): ?string
168197
return self::normalizeIp4($ip);
169198
}
170199

200+
/**
201+
* Filter ip6 address
202+
*
203+
* @param string $ip
204+
* @return string|null
205+
*/
171206
public static function filterIp6(string $ip): ?string
172207
{
173208
$ip = trim($ip);
174209
if ($ip === '' || !str_contains($ip, ':')) {
175210
return null;
176211
}
177212
$bin = inet_pton($ip);
178-
return $bin !== false ? inet_ntop($bin) : null;
213+
return $bin !== false ? (inet_ntop($bin)?:null) : null;
179214
}
180215

216+
/**
217+
* Filter ip4 address
218+
*
219+
* @param string $ip
220+
* @return string|null
221+
*/
181222
public static function filterIp4(string $ip): ?string
182223
{
183224
$ip = trim($ip);
184225
if ($ip === '' || !str_contains($ip, '.')) {
185226
return null;
186227
}
187228
$bin = ip2long($ip);
188-
return $bin !== false ? long2ip($bin) : null;
229+
return $bin !== false ? (long2ip($bin)?:null) : null;
189230
}
190231

232+
/**
233+
* Filter ip address
234+
*
235+
* @param string $ip
236+
* @return string|null
237+
*/
191238
public static function filter(string $ip): ?string
192239
{
193240
return self::filterIp6($ip)??self::filterIp4($ip);
194241
}
195242

196243
/**
244+
* Check if ip is in range
245+
*
197246
* @param string $ip
198247
* @param string $startIP
199248
* @param string $endIP
@@ -208,6 +257,8 @@ public static function inRange(string $ip, string $startIP, string $endIP): bool
208257
}
209258

210259
/**
260+
* Check if ip is in range cidr
261+
*
211262
* @param string $ip
212263
* @param string $cidr
213264
* @return bool
@@ -218,7 +269,6 @@ public static function inRangeCidr(string $ip, string $cidr): bool
218269
if (!$cidr) {
219270
return false;
220271
}
221-
222272
return self::inRange($ip, $cidr[0], $cidr[1]);
223273
}
224274
}

0 commit comments

Comments
 (0)