Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 746
от 22.08.2007, 18:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 442, Экспертов: 57
В номере:Вопросов: 2, Ответов: 5


Вопрос № 98687: есть ip-адреса. 81.20.98.167 принадлежит одному городу, 87.237.115.13 - другому. и есть форма, в которой поле "город". как сделать, чтобы при совпадении ip заданного (87.237.115.13) и текущего ($REMOTE_ADDR) в поле ГОРОД отображалось 'Санкт...
Вопрос № 98716: Уважаемые эксперты, как бы мне реализовать следующее: Дана строка символов, напр. $s='привет, hello'. Как бы получить из нее 2 переменные: с количеством русских букв и с количеством латинских?...

Вопрос № 98.687
есть ip-адреса. 81.20.98.167 принадлежит одному городу, 87.237.115.13 - другому. и есть форма, в которой поле "город". как сделать, чтобы при совпадении ip заданного (87.237.115.13) и текущего ($REMOTE_ADDR) в поле ГОРОД отображалось 'Санкт-Петербург'?
[ответ предпочтительнее на e-mail kol_mat@mail.ru]

пробовал так (см приложение), получилось только с последним вариантом, и то косо:

Приложение:

Отправлен: 17.08.2007, 02:19
Вопрос задал: nikemat (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Емельянов Данил Юрьевич
Здравствуйте, nikemat!
Здесь все зависит от того, где вы храните ip-адреса. Предлагаю использовать MySql базу данных. Создаете таблицу(ip_table) с полями (id,ip,city и т.д.) и делаете SQL-запрос.

$result=mysql_result("SELECT `city` FROM ip_table WHERE `ip`='".$_SERVER["REMOTE_ADDR"]."'",0);
//в переменной result будет храниться город.

Повторяю, вы не указали, где храните ip адреса, я просто привел пример с MySql БД. Возможно также использование XML.
---------
Жить хорошо, а хорошо жить еще лучше!
Ответ отправил: Емельянов Данил Юрьевич (статус: 2-ой класс)
Ответ отправлен: 17.08.2007, 06:40

Отвечает: Flynn
Здравствуйте, nikemat!
Стоит замерить что в одном городе может быть много айпи адресов, так как провайдерым их выдается какой-то диапазон, так что если уж и сравнивать, то скорее всего первые три цифры.
Так же я бы не советовал определять имя пользователя админа только по айпишнику. Если он у вас постоянный - да, можете ввести это как проверку, он оставлять только её одну не стоит, так как все что передает браузер серверу можно подделать.
первый вариант проверки - через switch.
Вариант второй - хранить информацию в бд. Предположим три поля - id, ip, city. Тогда получаем все айпишники что в БД, заносим их в массив и выбираем из массива нужный нам элемент.

Приложение:

Ответ отправил: Flynn (статус: 4-ый класс)
Ответ отправлен: 17.08.2007, 08:50


Вопрос № 98.716
Уважаемые эксперты, как бы мне реализовать следующее:
Дана строка символов, напр. $s='привет, hello'.
Как бы получить из нее 2 переменные: с количеством русских букв и с количеством латинских?
Отправлен: 17.08.2007, 11:11
Вопрос задал: Lxx (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Santana
Здравствуйте, Lxx!

с первым проблем нет ...
list($s1, $s2) = explode(",", $is);
или так
list($s_array[]) = explode(",", $is);
и будет у тебя массив слов

со вторым дело сложнее ... вкратце ... перебираешь все буквы строки, определяешь латынь или кирилица и считаешь
Ответ отправил: Santana (статус: 9-ый класс)
Ответ отправлен: 17.08.2007, 11:49
Оценка за ответ: 3
Комментарий оценки:
Вы меня не совсем поняли. Я как раз и хотел бы узнать, как различать латинские и кирилические символы...

Отвечает: Gines
Здравствуйте, Lxx!

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

<?php
$s='привет, hello';
$c=strlen($s);
$count_eng=0;
$count_rus=0;
for($i=0;$i<$c;$i++)
if(ord($s[$i])>64 && ord($s[$i])<123)
$count_eng++;
elseif((ord($s[$i])>191 && ord($s[$i])<256) || ord($s[$i])==168 || ord($s[$i])==184)
$count_rus++;
else
;//здесь обрабатывайте знаки (точки, пробелы, запятые и т.д.)
echo "Количество английских букв: $count_eng<br>";
echo "Количество русских букв: $count_rus";
?>

//функция ord() определяет ASCII код символа, по которому можно судить о его принадлежности,
//обратите внимание на код буквы "ё", он выпадает из общего диапазона
Ответ отправил: Gines (статус: 4-ый класс)
Ответ отправлен: 17.08.2007, 19:39
Оценка за ответ: 5
Комментарий оценки:
уже сам разобрался при помощи preg_match_all, но все-равно спасибо!

Отвечает: Kruphi
Здравствуйте, Lxx!
Вот работающий вариант основанные на посимвольном просмотре строки и сравнения этого символа со строками шаблонов:
<?php
$lat = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$rus_win1251 = 'абвгдеёжзийклмнопрстуфчцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФЧЦЧШЩЪЫЬЭЮЯ';
$rus_koi8r = 'БВЧЗДЕ_ЦЪЙКЛМНОПРТУФХЖЮГЮЫЭЯЩШЬАСбвчзде_цъйклмнопртуфхжюгюыэящшьас';

$str = 'привет, hello';

$ilat=0; $irus_win1251=0; $irus_koi8r=0;
for($i=0;$i<strlen($str);$i++)
{
if( strstr($lat, $str{$i}) )
$ilat++;
if( strstr($rus_win1251, $str{$i}) )
$irus_win1251++;
if( strstr($rus_koi8r, $str{$i}) )
$irus_koi8r++;
}
print("ilat=<b>$ilat</b> irus_win1251=<b>$irus_win1251</b> irus_koi8r=<b>$irus_koi8r</b>");
?>
Ответ отправил: Kruphi (статус: 2-ой класс)
Ответ отправлен: 17.08.2007, 20:01
Оценка за ответ: 5
Комментарий оценки:
И Вам спасибо


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.56 beta от 20.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное