【发布时间】:2018-10-07 22:19:48
【问题描述】:
我使用 file() 函数读取包含 ips 的远程文件并将其放入数组中,以便对照 $_SERVER[REMOTE_ADDR]; 进行检查。但是,一旦它被读取和处理,我会收到一条致命错误消息!
代码
$url = 'http://v87145.hosted-by-vdsina.ru/cUrl/blacklisted.dat';
$ip_block = file($url);
if(isset($_SERVER['REMOTE_ADDR'])) {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
$blocked = false;
foreach($ip_block as $ip)
echo $ip . "<br/>\n"; //just to verify file has been read
{
if($client_ip == $ip)
{
$blocked = true;
break;
}else if(strpos($ip, '*') !== false){
$digits = explode(".", $ip);
$client_ip_digits = explode(".", $client_ip);
if($digits[1] == '*' && $digits[0] == $client_ip_digits[0])
{
$blocked = true;
break;
}else if($digits[2] == '*' && $digits[0] == $client_ip_digits[0] && $digits[1] == $client_ip_digits[1]){
$blocked = true;
break;
}else if($digits[3] == '*' && $digits[0] == $client_ip_digits[0] && $digits[1] == $client_ip_digits[1] && $digits[2] == $client_ip_digits[2]){
$blocked = true;
break;
}
}else if(strpos($ip, "-") !== false){
list($start_ip, $end_ip) = explode("-", $ip);
$start_ip = preg_replace('/\s+/', '', $start_ip);
$end_ip = preg_replace('/\s+/', '', $end_ip);
$client_ip_long = ip2long($ip);
$start_ip_long = ip2long($start_ip);
$end_ip_long = ip2long($end_ip);
if($client_ip_long >= $start_ip_long && $client_ip_long <= $end_ip_long)
{
$blocked = true;
break;
}
}
}
if($blocked == true)
{
# header('HTTP/1.0 404 Not Found');
# die;
echo $ip . ' is blocked' . "<br />\n";
}
我得到的错误消息是:致命错误:无法在第 30 行的 /home/admin/web/*****/public_html/check_me.php 中中断/继续 1 级
可能有什么问题?如果我只是做一个简单的 array() 它工作正常,那么 file() 会产生这个错误吗?
【问题讨论】:
标签: php