Может код и грубый, но рабочий. Точность определения города зависит НЕ от скрипта, а от данных, получаемые им. Вот, собственно, код. С объяснением: Код (PHP): <?php // Сначала получаем данные о сервере $dom = $_SERVER['HTTP_HOST']; $ipus = getenv('REMOTE_ADDR'); // Если сервер - не localhost, то мы продолжим код /* Примечание: если хотите, можете эту проверку вырубить. Просто лично у меня она не прокатывала с денвера */ if ($dom != "localhost"){ // Формируем адрес подключения $fl = "http://ip-whois.net/ip_geo.php?ip=".$ipus; // Получаем эти данные через file_get_contents() /* Примечание: при использовании fopen() - не прокатывало... */ $data = file_get_contents($fl); /* Получив данные, мы получили ОГРОМНУЮ страницу. Следовательно, нам нужно её обрезать так, чтобы осталась только надпись города (Город: [полученный город]). Если вы откроете страницу http://ip-whois.net/ip_geo.php?ip=какой-нибудь_IP, то Вы увидите, что страница обработала данные и получила город. Вскрыв исходный код страницы, вы увидите, что там присутствует 2 надписи "Город: [город]": первая - в JS-скрипте, вторая - ниже. Для обрезания мы используем функцию strstr(), и, чтобы обрезать ПРАВИЛЬНО, сначала обрежем до места </IFRAME>, чтобы перейти ЗА надпись в JS-скрипте... */ $data = strstr($data, "</IFRAME>"); // А теперь непосредственно обрезаем от надписи "Город: " $data = strstr($data, "Город: "); /* Теперь посмотрите: третье обрезание присвоил другой переменной. Это нужно для того, чтобы после того, как обрезать второй раз, мы заменили ТАКУЮ ЖЕ оставшуюся часть в $data по образцу из $data2 */ $data2 = strstr($data, "<br>"); // Производим удаление, о котором я говорил выше $data3 = str_replace($data2, "", $data); // Выводим полученный город на экран echo $data3; // А это про localhost, о котором говорилось выше } else { $data3 = "Неподходящий хост"; } ?> Вот и всё. Кому надо - пользуйтесь Добавлено спустя 1 минуту 46 секунд: Найдете ошибку в синтаксисе - сообщите 1) Исправил ошибку echo $data3;
А зачем тут экситы? Здесь они не нужны) А там были нужны для того, чтобы лишних действий не совершилось, если письмо не отправится
Да я понял-понял) Это же пример. Никто из научных работников не выкладывают свои работы доконца... они вечно намудрят или упустят вещь... или напишут лишную штуку)
Ну да, ага. Это как бы вообще синтаксис у языка такой, точка с запятой обязательна. Я не знаю как у вас может работать без нее. Лично у меня во время теста этого кода вместо страницы просто был белый лист пока не поставил недостающий знак. PHP 5.3.3
вместо стр тыр тыр предлагаю: preg_match('/(?<=Город:\s)[А-Яа-яA-Za-z-]*(?=<)/', $data, $result); echo $result[0];
Привет! мне как чайнику можно подсказать как написать продолжение к preg_match('/(?<=Город:\s)[А-Яа-яA-Za-z-]*(?=<)/', $data, $result); echo $result[0]; Нужно: если $result равен Москва то открыть (лучше во фрейме) определенную страницу, а если равен любому другому городу то другую страницу. Все никак не могу сам дописать. Мне даже стыдно показать что я там написал))
Все намного проще. Есть страница с определенной инфой, когда на эту страницу заходит посетитель из Москвы он видит то-что нужно для жителя Москвы, если он с другого региона или страны там другая информация. Например: Для жителей Москвы на этой странице написано про "яблоко" а для всех жителей из других регионов про "грушу". ))) Вот
URL http://ip-whois.net/ip_geo.php?ip=[IP_адрес] выдаёт страница не найдена. Вот решение, по крайней мере с кешированием http://blog.ivru.net/?id=82