引用了一個IP分析類,在驗證IP地址的時候,用到的是如下代碼:
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6) === false) {
throw new \InvalidArgumentException("The value \"$ip\" is not a valid IP address.");
}
這個方法在我的機器上沒有什麼問題,PHP7.1的
但是在測試環境PHP5.3的就出現了,幾乎一直返回false的情況
百度上沒有遇到類似的案例,在Google上找到一片文章,
http://x3ro.de/validating-ip-addresses-in-php/
這上面和我的情況是一樣的,當FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6這兩個參數遇到一起,似乎是有bug導致怎麼返回都是錯誤的,所以解決辦法就是
把這個filter_var分開寫,不用|來判斷
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {
throw new InvalidArgumentException("The value \"$ip\" is not a valid IP address.");
}
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
throw new InvalidArgumentException("The value \"$ip\" is not a valid IP address.");
}