* Работа Ограничить доступ к сайту по IP PHP скрипт перестал работать

Я надеялся, что смогу помочь.
У меня был полностью рабочий PHP-скрипт (ниже), который разрешал доступ к определенной веб-странице каждые 10 минут.

$ipLog='ipLogFile.txt';
$timeout='1';

$register_globals = (bool) ini_get('register_gobals');
if ($register_globals) $vis_ip = getenv('REMOTE_ADDR');
else $vis_ip = $_SERVER['REMOTE_ADDR'];

function recordData($vis_ip,$ipLog)
{
$log=fopen("$ipLog", "a+");
fputs ($log,$vis_ip."][".time()."\n");
fclose($log);
}
function checkLog($vis_ip,$ipLog,$timeout)
{
global $valid; $ip=$vis_ip;
$data=file("$ipLog"); $now=time();

foreach ($data as $record)
{
$subdata=explode("][",$record);
if ($now < ($subdata[1]+600*$timeout) && $ip == $subdata[0])
{
$valid=0; echo header ("Location: https://example.com/please-wait-10-mins.php");
break;
}
}
}
checkLog($vis_ip,$ipLog,$timeout);
if ($valid!="0") recordData($vis_ip,$ipLog);

Он записывает IP-адрес пользователя и текущую метку времени в текстовый файл и проверяет текстовый файл при каждом доступе. Если текущий пользовательский IP имеет записанную метку времени менее 10 минут, перенаправьте на другую страницу

Использование отчетов об ошибках php:

error_reporting(E_ALL); ini_set('display_errors', 1);

Я сейчас вижу следующие ошибки:

  • Примечание: неопределенное смещение: 1 дюйм
    /home/sites/3a/2/2a40******/public_html/folder/file.php
    на линии 44

    Примечание: неопределенное смещение: 1 дюйм
    /home/sites/3a/2/2a40******/public_html/folder/file.php
    на линии 44

    Примечание: неопределенное смещение: 1 дюйм
    /home/sites/3a/2/2a40******/public_html/folder/file.php
    на линии 44

что указывает на:

if ($now < ($subdata[1]+600*$timeout) && $ip == $subdata[0])

Что изменилось?

Это плюс другие проблемы начались с тех пор, как мой хостинг провайдер обновил мою платформу

Помимо некоторых мелких проблем, главное, что изменилось, это версия PHP на версию PHP: 5.3.28 до последней версии! который полностью сломал сайт. Мне удалось понизить это до версии PHP: 5.3.29, но страницы защиты PHP-скрипта теперь не работают

Другие веб-сайты, которые я размещал на стандартной платформе, используют версию PHP: 5.3.28 — На которой скрипт также не работает

Этот скрипт работал безупречно в течение многих лет и теперь не работает вообще, я не могу точно определить, почему

Я надеюсь, что простое изменение синтаксиса может решить проблему, но так как оно случайно перестало работать, я думаю, что это могло быть изменение в файле php ini хостинг-провайдеров или другое изменение политики

Любая помощь будет принята с благодарностью

Обновить

изменения

$subdata[1]

в

$subdata[0]

устраняет ошибку, но не блокирует доступ к странице

решаемая

Мне пришлось отказаться от этого сценария — я не мог выяснить, почему он перестал работать

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

Создайте базу данных sql с 3 полями id, time, IP и в этом случае ее
ip-block — Примечание: имейте в виду длину адресов ipv6

Решение

Сначала сгенерируйте переменную с IP-адресом пользователя, в этом случае $ vis_ip:

$register_globals = (bool) ini_get('register_gobals');
if ($register_globals) $vis_ip = getenv('REMOTE_ADDR');
else $vis_ip = $_SERVER['REMOTE_ADDR'];

Затем подключитесь к вашей базе данных и выполните следующее:

mysql_query("DELETE FROM ip-list WHERE time < (NOW() - INTERVAL 10 MINUTE)");

$result = mysql_query("SELECT ip FROM ip-list WHERE ip = '$vis_ip'");

if(mysql_num_rows($result)==1){
header("Location: ../folder/file.php");
}
else {
$result = mysql_query("INSERT INTO ipblock (ip, time) VALUES ('$vis_ip', NOW())");
}

Другими словами, если ваш IP есть в списке, вы не заходите

При этом используется база данных SQL для хранения IP-адресов посетителей и удаляются строки, созданные более 10 минут назад (ИНТЕРВАЛ 10 МИНУТ).

У меня изначально были проблемы с:

Предупреждение: невозможно изменить информацию заголовка — заголовки уже отправлены
(вывод начался в ххххх в строке х

Предупреждение: невозможно изменить информацию заголовка — заголовки уже отправлены по ошибке

К счастью, с помощью поста о переполнении стека я удалил все пробелы и поместил в начало документа. Это решило проблему

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

2

Решение

удалить echo заявление перед header(), это должно выглядеть так:
$valid=0; header ("Location: https://example.com/please-wait-10-mins.php");

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]