file_get_contents ($URL) возвращает ошибку "Отказано в доступе"

Я снял следующий код PHP, чтобы я мог найти информацию о местоположении пользователей, что позволит мне выполнить некоторые уровни ограничений.

Тем не менее, код хорошо работает на моем локальном сервере. Но когда я загружаю те же самые файлы php на свой удаленный веб-сервер, он возвращает ошибку следующим образом:

Предупреждение: file_get_contents ( http://api.codehelper.io/ips/?php&ip=192.168.1.1): не удалось открыть поток: доступ запрещен в /home/www/xyberinternational.com/lotto247.biz/visitorlocation/userip/ip.codehelper.io.php в строке 41.

Я включил следующие файлы и их коды ниже. Как я могу исправить эту ошибку?

Файл index.php

<?php
require_once("userip/ip.codehelper.io.php");
require_once("userip/php_fast_cache.php");
$_ip = new ip_codehelper();

$real_client_ip_address = $_ip->getRealIP();
$visitor_location       = $_ip->getLocation($real_client_ip_address);

$guest_ip   = $visitor_location['IP'];
$guest_country = $visitor_location['CountryName'];
$guest_city  = $visitor_location['CityName'];
$guest_state = $visitor_location['RegionName'];

echo "IP Address: ". $guest_ip. "<br/>";
echo "Country: ". $guest_country. "<br/>";
echo "State: ". $guest_state. "<br/>";
echo "City: ". $guest_city. "<br/>";


$ip             = $visitor_location['IP'];
$Continent_Code     = $visitor_location['ContinentCode'];
$Continent_Name     = $visitor_location['ContinentName'];
$Country_Code2      = $visitor_location['CountryCode2'];
$Country_Code3      = $visitor_location['CountryCode3'];
$Country        = $visitor_location['Country'];
$Country_Name       = $visitor_location['CountryName'];
$State_Name         = $visitor_location['RegionName'];
$City_Name      = $visitor_location['CityName'];
$City_Latitude      = $visitor_location['CityLatitude'];
$City_Longitude     = $visitor_location['CityLongitude'];
$Country_Latitude   = $visitor_location['CountryLatitude'];
$Country_Longitude  = $visitor_location['CountryLongitude'];
$Country_Longitude  = $visitor_location['CountryLongitude'];
$LocalTimeZone      = $visitor_location['LocalTimeZone'];
$Calling_Code       = $visitor_location['CallingCode'];
$Population     = $visitor_location['Population'];
$Area_SqKm      = $visitor_location['AreaSqKm'];
$Capital        = $visitor_location['Capital'];
$Electrical     = $visitor_location['Electrical'];
$Languages      = $visitor_location['Languages'];
$Currency       = $visitor_location['Currency'];
$Flag           = $visitor_location['Currency'];
?>

файл ip.coderhelper.io.php

<?php
class ip_codehelper {
public function getRealIP() {
    $ipaddress = '';
    if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
        $ipaddress = $_SERVER['HTTP_CF_CONNECTING_IP'];
    } else if (isset($_SERVER['HTTP_X_REAL_IP'])) {
        $ipaddress = $_SERVER['HTTP_X_REAL_IP'];
    }
    else if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';

    return $ipaddress;
}

public function getLocation($ip="") {
    if($ip == "") {
        $ip = $this->getRealIP();
    }
    if(!class_exists("phpFastCache")) {
        die("Please required phpFastCache Class");
    }
    // you should change this to cURL()
    $data = phpFastCache::get("codehelper_ip_".md5($ip));
    // caching 1 week


   if($data == null) {
        $url = "http://api.codehelper.io/ips/?callback=codehelper_ip_callback&ip=".$ip;
        $json = file_get_contents($url);
        $data = json_decode($json,true);
        phpFastCache::set("codehelper_ip_".md5($ip),$data,3600*24*7);
    }

    return $data;
}

public function SSLForwardJS() {
    $ip = $this->getRealIP();
    if(!class_exists("phpFastCache")) {
        die("Please required phpFastCache Class");
    }

    // you should change this to cURL()
    $data = phpFastCache::get("codehelper_ip_ssl".md5($ip));
    // caching 1 week
    if($data == null) {
        $url = "http://api.codehelper.io/ips/?callback=codehelper_ip_callback&ip=".$ip;
        $data = file_get_contents($url);

            phpFastCache::set("codehelper_ip_ssl".md5($ip),$data,3600*24*7);
        }
        return $data;
    }
}

Между тем, fastcatch.php довольно большой.

1 ответ

Это ваша проблема прямо здесь:

    $url = "http://api.codehelper.io/ips/?callback=codehelper_ip_callback&ip=".$ip;
    $data = file_get_contents($url);

(В нижней части файла ip.coderhelper.io.php)

Это приводит к ошибке, потому что сервер, с которого вы пытаетесь получить данные, отказывает вам в доступе к файлу. У вас есть пара вариантов:

1) Поговорите с персоналом codehelper.io и посмотрите, есть ли IP вашего сервера в черном списке или общий диапазон (Иногда, в зависимости от того, где вы покупаете сервер у компаний, занесите их в черный список, потому что они, как известно, рассылают вредоносные атаки или Запросы.). Попросите их посмотреть, могут ли они решить проблему.

2) Если это нереальный вариант, вы можете посмотреть на этот пост, и у второго ответа есть немного хакерской работы. Это стоит попробовать.

Другие вопросы по тегам