[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: redirect на php нужных ip
Melnikov
Помогите пожалуйста! пишу тест и мне нужно что бы после прохождения теста записывался ip пользователя для того что бы при повторной попытке прохождения теста его автоматически перенаправляло на другую страницу!

Записываю ip посетителей в Xml вот таким скриптом:
<?php
$ip=$_SERVER['REMOTE_ADDR'];
$file=fopen('ip.xml', 'r+');
fseek($file, +1, SEEK_END);
fputs($file, '');
fputs($file, '<message>');
fputs($file, '');
fputs($file, ' ');
fputs($file, '<ip><user>');
fputs($file, $ip);
fputs($file, '</ip></user>');
fputs($file, '');
fputs($file, '</message>');
fclose($file);
?>

как вытащить из XML ip и что делать с ним дальше ума не приложу!!! нагуглить ни чего не смог(((( ПОМОГИТЕ!



Спустя 2 минуты, 39 секунд (25.08.2010 - 09:58) linker написал(а):
DOM XML или SimpleXML.

Спустя 6 минут, 55 секунд (25.08.2010 - 10:05) Melnikov написал(а):
без разницы главное чтоб работало!

Спустя 1 минута, 34 секунды (25.08.2010 - 10:06) linker написал(а):
Вот я и говорю, используй или или. Для того и существуют эти штуки, чтоб с XML работать.

Спустя 5 минут, 47 секунд (25.08.2010 - 10:12) Melnikov написал(а):
Вчера весь рабочий день потратил на то что бы найти как вытащить ip из XML файла и присвоить его переменной затем сравнить его с ip посетителя и если совпадает перевести на другую страницу!!! Ни чего не нагуглил! Я полный новичок в этом деле!! Очень радовался когда ip в xml записываться стали!)))

Мне кажется код очень простым должен быть но из за незнания и лимита времени очень прошу Вас мне помочь!

Спустя 18 минут, 3 секунды (25.08.2010 - 10:30) linker написал(а):
Структура XML
<?xml version="1.0"?>
<messages>
<ip>
127.0.0.1</ip>
<ip>
127.0.0.2</ip>
</messages>

function SetIP($Xml, $Ip)
{
$IpNode = $Xml->createElement('ip', $Ip);
$Xml->documentElement->appendChild($IpNode);
}

function GetIPs($Xml)
{
$IPArray = array();
foreach($Xml->documentElement->childNodes as $IpNode)
{
if ($IpNode->nodeType != XML_ELEMENT_NODE) continue;
$IPArray[] = $IpNode->nodeValue;
}
return $IPArray;
}

$Xml = new DomDocument();
$Xml->load('ip.xml');
// Получаем массив всех ипов
$Res = ReadIPs($Xml);
// Добавляем новый IP
SetIP($Xml, '192.168.0.2');
$Xml->save('ip.xml');

Пример коленочный, напильником точить - это уже сам.

Спустя 30 минут, 34 секунды (25.08.2010 - 11:01) Melnikov написал(а):
Спасибо огромное, но прошу подсказать как сравнить загруженные ip с ip посетителя! не догоняю!


<?php
function
SetIP($Xml, $Ip)
{
$IpNode = $Xml->createElement('ip', $Ip);
$Xml->documentElement->appendChild($IpNode);
}

function GetIPs($Xml)
{
$IPArray = array();
foreach($Xml->documentElement->childNodes as $IpNode)
{
if ($IpNode->nodeType != XML_ELEMENT_NODE) continue;
$IPArray[] = $IpNode->nodeValue;
}
return $IPArray;
}

$Xml = new DomDocument();
$Xml->load('ip.xml');
$ip1=$_SERVER['REMOTE_ADDR'];

??????????


SetIP($Xml, $ip1);
$Xml->save('ip.xml');

?>



в таком виде все работает ip записываются, но нужно сравнить с теми кот уже записаны и если есть то редирект!!!

Прошу не переоценивать мои познания в php!!!

Спустя 9 минут, 52 секунды (25.08.2010 - 11:11) linker написал(а):
$ip1=$_SERVER['REMOTE_ADDR'];
$Xml = new DomDocument();
$Xml->load('ip.xml');
$IPs = GetIPs($Xml);
if (($Found = array_search($ip1, $IPs)) !== false)
echo 'Нашли';
else
echo 'Не нашли';
Можно написать отдельную функцию, которая будет искать нужный IP (например с помощью XPath).

P.S.
function CheckIP($Xml, $IP)
{
$XPath = new DOMXpath($Xml);
$IpNodes = $XPath->query('//messages/ip[. = "' . $IP . '"]');
return ($IpNodes->length > 0) ? $IpNode->item(0)->nodeValue : '';
}

$IPResult = CheckIP($Xml, $ip1);
if (!empty($IPResult))
echo 'Нашли';
else
echo 'Не нашли';

Спустя 2 часа, 47 минут, 35 секунд (25.08.2010 - 13:58) Melnikov написал(а):
Спасибо большое дружище!)))) ОЧЕНЬ при очень помог!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.