Плезные функции

Автор статьи: нет ©
Сайт Автора: нет
E-mail Автора: нет
Дата публикации: 28.01.2006

Здесь мы приводим те функции, которые не совсем нужны на сайте, но кто знает, как нам кажется, без них, просто, не обойтись.

1. Функция определения длительности процесса генерации странички html сервером.
Она практически совсем не нужна, но так ради прихоти, можно поставить ее и, тогда, мы будем знать сколько времени генерируется страничка

<?
$time1 = microtime(); //стоит в начале скрипта
//--------------------
// здесь идет текст нашего скрипта
//--------------------
$time2 = microtime(); //стоит в конце скрипта
// выводим в окно броузера $mtime - время генерации страницы.
$mtime = abs ($time2 - $time1);
echo $mtime;
?>

2. Функция определения броузера пользователя.
У нас она определяет броузер: Explore, Netscape, Opera, если программа не находит этих броузеров, она решает, что это Robot,
то есть пользователь обратился к сайту не используя броузер, а просто скачивает файлы, используя свой сервер,
включив программу робот. Для чего надо определять пришел на сайт броузер или робот?
Программы - роботы - это Поисковые системы: Яndex, Rambler, Aport, и др. Работают они следующим образом:
сначала Поисковая система - робот ищет на сайте все ссылки, а потом скачивает себе все странички, найденные
по ссылкам, не открывая их в броузере, потому что на данном этапе это им не надо. Работают они очень быстро,
к примеру, Яndex скачивал с нашего сайта в секунду до 10 страниц, то есть 10 раз в секунду обращался к нашему скрипту.
Теперь представьте, что на сайт заходит еще 3 человека через броузер, пытаясь обращаться к базам данных,
так как мы не используем MySql, у нас возникают серьезные проблемы с совместным доступом на чтение и
запись в эти базы, поэтому определяя, что к нам зашла программа робот, мы в нашем скрипте ставим препятствие
в скачивании страниц (у нас временной диапазон ожидания, после скачки роботом одного файла 2 секунды), то есть,
теперь Яndex скачивает с нашего сайта за 2 секунды одну страничку. Зайдите к нам на "статистику за сутки" и вы увидите,
что это действительно серьезная проблема. Обычно, программы роботы скачивают 500 страниц с сайта.
Еще один плюс такого подхода состоит в том, что есть ссылки на сайте, которые мы не хотим,
чтобы были проиндексированы в поисковых системах. Например, у нас есть раздел Статистика сайтов,
на котором, идут ежеминутные изменения, Яndex, заходя через неделю индексирует их по новому и,
в итоге, практически одни и те же страницы проиндексированы у него по 50 раз, что мешает пользователям искать
действительно нужную информацию в этих поисковикак о нашем сайте. То есть, если к нам заходит поисковик,
мы прячем от него нежелательные ссылки, которые броузерам видны.

<?
//Функция определения броузера пользователя
function broser ($pass_br){
if (eregi("Opera", $pass_br)) { $broser = "Opera"; }
else { if (eregi("MSIE", $pass_br)){ $broser = "Explore"; }
else { if (eregi("Mozilla", $pass_br)){ $broser = "Netscape"; } } }
if($broser == ""){$broser = "Robot";}
return $broser;
}
//определяем HTTP_USER_AGENT
$user = broser ($HTTP_SERVER_VARS["HTTP_USER_AGENT"]);
//если пользователь Robot, программа засыпает на 2 секунды
if ($user == "Robot") { sleep(2); }
//--------------------
// здесь идет текст нашего скрипта
//--------------------
//если скачивание поисходит роботом, он не видит следующую ссылку
if ($user != "Robot") {echo"ссылка, которая роботу не видна";}
?>

3. Функция определения IP.
Сервер, иногда выдает при определении IP адреса пользователя, не один IP - 195.162.35.251, а несколько (195.162.35.251, 195.162.45.351, unknown) Для правильного
определения IP, введем небольшую функцию. Сначала мы определяем IP адрес, потом раскладываем его на составные части, выводим только первый IP до первой
запятой. Зачем это надо? Для определения правильной статистики по сайту, правильной записи в базу данных, допустим, в Гостевую или Форум. Кроме этого, если
сервер не смог определить IP, то в итоге в программу сервер выдаст $ip = unknown

<?
//определяем IP
if(empty($user_ip)){if (getenv('HTTP_X_FORWARDED_FOR')) {$user_ip=getenv('HTTP_X_FORWARDED_FOR'); } else{$user_ip=getenv('REMOTE_ADDR'); }}
else{$user_ip=getenv('REMOTE_ADDR'); }
//раскладываем IP на составные части
if(15 < strlen($user_ip)){list($user_ip,$user_ip1,$user_ip2,$user_ip3)=explode(", ", $user_ip);}
//выводим для программы толко первый IP
$ip = $user_ip;
//--------------------
// здесь идет текст нашего скрипта
//--------------------
?>

4. Функция разделения IP пользователя по составляющим частям.
Это надо, например, чтобы скрипт прочитал до какой-то точки IP, не дальше, например, для того, чтобы узнать сколько уникальных посетителей записано в базу по
посетителям (у нас это видно: статистика за сутки). В итоге, пользователь 213.172.16.201 и 213.172.19.124 будет идентифицирован скриптом как один, пришедший с
одного компьютера.

<?
$ip = "213.172.16.201";
//функция, для выделение определенного количесво знаков из IP
function obrez ($ip_pass){
if ( ereg("([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)", $ip_pass, $array))
$array[3] = substr ( $array[3], 0, 1);
$ip_pass = "$array[1].$array[2].$array[3]";
return $ip_pass;
}
//обрезаем IP до 213.172.1
$obrez_ip = obrez ($ip);
//--------------------
// здесь идет текст нашего скрипта
//--------------------
?>

5. Мы не допускаем к сайту пользователей, у которых не определился IP. В этом случае, сервер при его определении, выдает $ip = "unknown", то есть неизвестный.
Происходит это из-за того, что многие прокси - сервера, через которые заходят пользователи неправильно его выдает нашему серверу. На 100 посетителей - 5 IP
адресов не определяется - это практика интернета. Теперь представьте, что такой пользователь сделал что-то плохое на Вашем сайте, найти его Вы уже никак не
сможете, поэтому мы бы советовали всем, не допускать в сайту посетителей с неопределенным IP. Хотя, IP можно так изменить через тот же прокси - сервер, что Вы и
не подумаете. У нас был посетитель: 1.1.1.1. или 127.0.0.0., таких IP быть не может, поэтому это не панацея, но все - равно, мы добавили это ограничение...

<?
$ip = "unknown";
//функция, для не допуска на сайт IP = unknown, то есть неопределенных IP
if (eregi("unknown", $ip))
{
//выводим верх страницы шаблона
echo "К сожалению, Вы не можете быть допущены к сайту.
Причина: Сервер не смог определить Ваш IP адрес";
//выводим низ страницы шаблона и останавливаем пользователя
exit;
//--------------------
// здесь идет текст нашего скрипта
//--------------------
}
?>

6. Еще одна функция: запрет IP к доступу на сайт.
Если Вы видите, что какой-то пользователь начал "баловаться" на сайте, Вам нужно тут же перекрыть ему доступ на сайт. В сязи с чем, в Админ-файле у Вас должна
быть функция записи в файл запрета (например, zapret_sait.txt) нежелатальных IP адресов, которые будут блокироваться программой. При заходе на сайт такого IP
адреса пробегаем по файлу запрета и, если находим, что IP совпадают, запрещаем доступ к сайту.

<?
//$ip - IP ранее определенный скриптом
// пробегаем по файлу запрета доступа к сайту
$zapret_sait = file("zapret_sait.txt");
for ($i = 0; $i < count($ban_sait); $i++)
{
$ban[$i] = ereg_replace("\n","",$ban_sait[$i]);
list($banip,$banmessage)= spliti ("\::",$zapret_sait[$i]);
//если, в файле находим совпадение с IP
if (eregi("^$banip$",$ip))
{
//выводим верх страницы шаблона
echo"Доступ закрыт для пользователя: $ip";
//выводим низ страницы шаблона и останавливаем программу
exit;
}
}
//--------------------
// здесь идет текст нашего скрипта
//--------------------
}
?>

7. На нашем сайте, программу останавливает функция exit; в определенных местах, когда скрипт по запросу пользователя выполнился и нет смысла пользователю
продолжать движение дальше по этому скрипту. В самом конце скрипта, в этом случае, мы ставим "Ошибка", которая обозначает, что такого файла, то есть ссылки,
нет на нашем сайте. Посмотреть как это выглядит можно здесь. Зачем это надо? На нашем сайте происходят изменения, а в поисковых системах остаются старые
ссылки, при заходе программой роботом, последняя скачает с сайта "Ошибку", что немаловажно. Нижеследующий кусок скрипта находится в самом низу программы и
начинает работать, когда в скрипте не найдено никаких ссылок.

<?
$query = $HTTP_SERVER_VARS["QUERY_STRING"];
//выводим верх страницы шаблона
echo"http://Ваш_сайт.ru/?$query
Такого url нет на нашем сайте"
//выводим низ страницы шаблона
exit;
//Здесь завершается весь скрипт
?>

Спасибо, что дочитали до конца эту страничку, удачи в программировании.