PHP-код по умолчанию с ошибкой, когда это не должно быть

0

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

Проблема в том, что он перенаправляет всех, кто не соответствует состоянию, указанному в URL-адресе ошибки, когда он должен позволить им посещать сайт.

Я думаю, там пропало возвращение? Ребята, что вы думаете?

<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);

require_once '/vendor/autoload.php';

use MaxMind\Db\Reader;

$databaseFile = '/geoip/GeoIP2-City.mmdb';
$ipWhiteList = ['123', '321'];

if(!in_array($_SERVER["REMOTE_ADDR"], $ipWhiteList)) {
    $reader = new Reader($databaseFile);
    $iso_code = $reader->get($_SERVER["REMOTE_ADDR"])['subdivisions'][0]['iso_code'];
    if (!isset($_REQUEST['HTTP_REFERER'])) {
        switch($iso_code) {
            case NJ:
                $url = 'http://example.com';
                break;
            case DE:
                $url = 'http://example.com';
                break;
            default:
                $url = 'http://www.example.com/?=error';
                break;
        }
        $reader->close();
        header('Location: '.$url);
        die();
    } else {
        if(strpos($_SERVER['HTTP_REFERER'], "example2.com") > -1) {
            echo "You were redirected from ".urldecode($_REQUEST['referer']).", but it is not available in your area (".$iso_code.").";
            break;
        } else {
            echo "Welcome!";
            break;
        }
    }
}
?>
Теги:
maxmind

2 ответа

0

Попробуй это. Если государство не из NJ или DE, то ничего не делайте.

<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);

require_once '/vendor/autoload.php';

use MaxMind\Db\Reader;

$databaseFile = '/geoip/GeoIP2-City.mmdb';
$ipWhiteList = ['123', '321'];

if(!in_array($_SERVER["REMOTE_ADDR"], $ipWhiteList)) {
    $reader = new Reader($databaseFile);
    $iso_code = $reader->get($_SERVER["REMOTE_ADDR"])['subdivisions'][0]['iso_code'];
    if (!isset($_REQUEST['HTTP_REFERER'])) {
        switch($iso_code) {
            case NJ:
                $url = 'http://example.com';
                header('Location: '.$url);
                                die();
                break;
            case DE:
                $url = 'http://example.com';
                header('Location: '.$url);
                die();
                break;
            default:
        }
        $reader->close();
    } else {
        if(strpos($_SERVER['HTTP_REFERER'], "example2.com") > -1) {
            echo "You were redirected from ".urldecode($_REQUEST['referer']).", but it is not available in your area (".$iso_code.").";
            break;
        } else {
            echo "Welcome!";
            break;
        }
    }
}
?>
0

Возможно, попробуйте загрузить все допустимые значения и убедитесь, что они действительны, даже если это не NJ/DE.

if (in_array($state, array('NJ', 'DE'))) {
    // Redirect
} elseif (!in_array($states, $all_states_array)) {
    // Go to error.
}

Иначе подразумевается, что сценарий будет продолжать работать. Вы можете структурировать это несколько разных способов, в зависимости от того, сколько вам нужно расширить:

if (!in_array($state, $all_states_array)) {
    // Error
}

if (in_array($state, array('NJ', 'DE'))) {
   // Redirect
}

Вы также можете добавить все случаи:

case 'DE':
    // Do something;
    break;
case 'NJ':
    // Do soemthing;
    break;
case 'PA':
case 'AL':
case 'NY':
case 'OK':
case 'TX':
...
    // Valid, but not the right target.
    break;
default:
    // show error
  • 0
    Проблема в том, что есть тысячи ISO-кодов (у нас и за рубежом), поэтому они не будут реалистичными. Мы хотим заблокировать только 2 штата в США, и все остальные могут остаться на странице :(
  • 0
    Сначала вы должны отфильтровать по стране. Если не в США, просто игнорируйте остальную логику.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню