Php мелочи

¬се подробности о открытие дверей „ерноморск цена у нас.

Php-web-дизайн > Php мелочи

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

1. ‘ункци€ определени€ длительности процесса генерации странички 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;
?>

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("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"ссылка, котора€ роботу не видна";}
?>

3. ‘ункци€ определени€ 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;
//--------------------
// здесь идет текст нашего скрипта
//--------------------
?>

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 = 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;
}
}
//--------------------
// здесь идет текст нашего скрипта
//--------------------
}
?>

7. Ќа нашем сайте, программу останавливает функци€ exit; в определенных местах, когда скрипт по запросу пользовател€ выполнилс€ и нет смысла пользователю продолжать движение дальше по этому скрипту. “о есть, все отсеки программы выгл€д€т так:
<?
if ($форум == "начать")
{
//начинаетс€ скрипт форума
//закончилс€ скрипт форума
exit;
}
if ($гостева€ == "начать")
(
//начинаетс€ скрипт гостевой
//закончилс€ скрипт гостевой
exit;
}
?>
¬ самом конце скрипта, в этом случае, мы ставим "ќшибка", котора€ обозначает, что такого файла, то есть ссылки, нет на нашем сайте. «ачем это надо? Ќа нашем сайте происход€т изменени€, а в поисковых системах остаютс€ старые ссылки, при заходе программой роботом, последн€€ скачает с сайта "ќшибку", что немаловажно. Ќижеследующий кусок скрипта находитс€ в самом низу программы и начинает работать, когда в скрипте не найдено никаких ссылок.

<?
$query = $HTTP_SERVER_VARS["QUERY_STRING"];
//выводим верх страницы шаблона
echo"https://ваш_сайт.ru/ваш_файл.php?$query “акого url нет на нашем сайте";
//выводим низ страницы шаблона
exit;
//«десь завершаетс€ весь скрипт
?>

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


»сточник: јлександр ”стюгов




ѕри перепечатке информации делайте, пожалуйста, ссылку на наш сайт (либо поделитьс€ вконтакте, гугл+ или делитесь в одноклассниках статьЄй). —пасибо!

»сточник: www.wr-script.ru©, 2004-2023г.

ƒелитесь с друзь€ми в соцсет€х. јктивные комментаторы получают свежие скрипты и бесплатные доработки от WR-Script.ru!

¬ернутьс€ к стать€м помощи WEB-мастеру

WR-–°—З—С—В—З–Є–Ї