Здесь приведу те функции, которые не совсем нужны на сайте, но бывает, без них, просто, не обойтись.
Функция определения длительности процесса генерации странички html сервером.
Она практически совсем не нужна, но так ради прихоти, можно поставить ее и, тогда, мы будем знать сколько времени генерируется страничка
<?
$time1 = time(); //стоит в начале скрипта
$time_m1 = microtime();
//--------------------
// здесь идет текст нашего скрипта
//--------------------
$time2 = time(); //стоит в конце скрипта
$mtime = abs ($time2 - $time1);
$time_m2 = microtime();
$mtime_m = abs ($time_m2 - $time_m1);
$mtime_m = substr($mtime_m, 2, 3);
$mtime .= "." ."$mtime_m";
// выводим в окно броузера $mtime - время генерации страницы.
echo $mtime;
?>
Функция определения броузера пользователя.
У нас она определяет броузер: Explore, Netscape, Opera, если программа не находит этих броузеров, она решает, что это Robot, то есть пользователь обратился к сайту не используя броузер, а просто скачивает файлы, используя свой сервер, включив программу робот. Для чего надо определять пришел на сайт броузер или робот? Программы - роботы - это Поисковые системы: Яndex, Rambler, Aport, и др. Работают они следующим образом: сначала Поисковая система - робот ищет на сайте все ссылки, а потом скачивает себе все странички, найденные по ссылкам, не открывая их в броузере, потому что на данном этапе это им не надо.
<?
//Функция определения броузера пользователя
function broser ($pass_br){
if (eregi("Opera", $pass_br)) { $broser = "Opera"; }
else { if (eregi("MSIE", $pass_br)){ $broser = "Explore"; }
else { if (eregi("Gecko", $pass_br) or eregi("Netscape", $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"ссылка, которая роботу не видна";}
?>
Функция определения IP.
Сервер, иногда выдает при определении IP адреса пользователя, не один IP - 195.162.35.251, а несколько (unknown, 195.162.35.251, 195.162.45.351) Для правильного определения 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 на составные части и ищем в них нормальный Ip
if(15 < strlen($user_ip)){
$user_ip_pass = split(", ", $user_ip);
for($i=0; $i < sizeof($user_ip_pass); $i++){
if(eregi("unknown", $user_ip_pass[$i]) or $user_ip_pass[$i] == ""){}
else {
if (ereg("[a-zA-Z]", $user_ip_pass[$i])){}
else{$user_ip = $user_ip_pass[$i]; break; }
}
if($i == sizeof($user_ip_pass)-1){$user_ip = "unknown";}
}
}
//выводим для программы толко первый попавшийся нормальный Ip
$ip = $user_ip;
//--------------------
// здесь идет текст нашего скрипта
//--------------------
?>
Функция разделения 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);
//--------------------
// здесь идет текст нашего скрипта
//--------------------
?>
Не допускаем к сайту пользователей, у которых не определился 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;
//--------------------
// здесь идет текст нашего скрипта
//--------------------
}
?>
Запрет IP к доступу на сайт.
Если Вы видите, что какой-то пользователь начал "баловаться" на сайте, Вам нужно тут же перекрыть ему доступ на сайт. В сязи с чем, в Админ-файле у Вас должна быть функция записи в файл запрета (например, zapret_sait.txt) нежелатальных IP адресов, которые будут блокироваться программой. При заходе на сайт такого IP адреса пробегаем по файлу запрета и, если находим, что IP совпадают, запрещаем доступ к сайту.
<?
//$ip - IP ранее определенный скриптом
// пробегаем по файлу запрета доступа к сайту
$zapret_sait = forum'>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;
}
}
//--------------------
// здесь идет текст нашего скрипта
//--------------------
}
?>