Ниже приведены ответы на наиболее часто задаваемые вопросы в форумах посвященных программированию на PHP. Вопрос: Как определить версию браузера? Ответ. Выполните эту программу и Вам все станет ясно: <body text=white bgcolor=black> <?php echo "Ваш адрес (REMOTE_ADDR): <font color=#ccccff><b><big>
".getenv("REMOTE_ADDR")."
</big></b></font><br><br>"; echo "Ваша программа (HTTP_USER_AGENT): <font color=#ccccff><b>
".getenv("HTTP_USER_AGENT")."
</b></font><br><br>"; echo "Предыдущая страница (HTTP_REFERER): <font color=#ccccff><b>
".getenv("HTTP_REFERER")."
</b></font><br>"; ?> Соответственно делаем if (strstr(getenv("HTTP_USER_AGENT"),"MSIE")) echo "Вы используете Internet Explorer"; и другие проверки (в зависимости от того, с какой целью Вы решили разделять браузеры). Вопрос: У меня есть веб-форма с кучей данных. Как упростить обработку кучи полей из формы? Ответ. Используйте массивы! Важно! Не используйте констукцию if ($название_поля) {действия} для проверки, установлена ли переменная. Следует использовать if (isset($названия_поля)) { ... } Чтобы работать было удобнее, делайте так: <?php <form ... > Имя: <input type=text name=asd[]> <br> Фамилия: <input type=text name=asd[]> <br> Отчество: <input type=text name=asd[]> <br> <input type=submit> </form> ?> В принимающем файле осталось только пройтись по массиву: <?php for ($i=0; $i<count($asd); $i++) { echo "$asd[$i]<br>"; } ?> Если Вам важен порядок переменных (вдруг, юзер на странице не все заполнит), то делаем так: <?php Имя: <input type=text name=asd[name]> <br> Фамилия: <input type=text name=asd[name2]> <br> ?> Проверяем соответственно: <?php if ($asd[name]) { // в PHP пишите так: $asd['name'] echo "Ваше имя - $asd[name]"; } ?> Если у Вас сложная структура и двухмерный массив ($asd['info']['name']), то делайте (в echo) вот так: <?php echo "Ваше имя - {".$asd[info][name]."}"; ?> Вопрос:Как преобразовать IP в число integer и обратно? Ответ.Для чего нужно преобразовывать IP в число int? Чтобы он (IP адрес) занимал меньше места. IP в виде строки: "222.222.222.222" - 15 байт. В виде числа - 4 байта. Это число можно писать в базу данных или переменную в PHP. В PHP 4 есть встроенные функции ip2long (аналог нашей ip2int) и logn2ip). Проверено - все функции работают на ура. Нужно соблюдать тип полей при вставке IP в базу: либo INT (для +/-), либо UNSIGNED INT (только +). А теперь сами исходники функций: Функция ip2int преобразует ip-адрес в число (которое можно хранить в PHP, помещать в MySQL...) Функция int2ip преобразует число в ip-адрес... <?php function int2ip($i) { $d[0]=(int)($i/256/256/256); $d[1]=(int)(($i-$d[0]*256*256*256)/256/256); $d[2]=(int)(($i-$d[0]*256*256*256-$d[1]*256*256)/256); $d[3]=$i-$d[0]*256*256*256-$d[1]*256*256-$d[2]*256; return "$d[0].$d[1].$d[2].$d[3]"; } function ip2int($ip) { $a=explode(".",$ip); return $a[0]*256*256*256+$a[1]*256*256+$a[2]*256+$a[3]; } ?> Существует так же альтернативный вариант: Можно переложить операции по переводу адресов на сам mySQL. Запрос select INET_ATON("209.207.224.40") вернет соответствующее число (3520061480). И наоборот, запрос select INET_NTOA(3520061480) вернет строку "209.207.224.40". mySQL переведет IP/число намного быстрее, чем функция на PHP или встроенная ip2long. Разумеется, нужно не select'ы делать (отдельным запросом), а использовать приведенные SQL функции прямо во время вставки/выборки. |