關於filter_var()驗證IP出現意外false的問題解決辦法

引用了一個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.");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章