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; //Çäåñü çàâåðøàåòñÿ âåñü ñêðèïò
?>
Ñïàñèáî, ÷òî äî÷èòàëè äî êîíöà ýòó ñòðàíè÷êó,
óäà÷è â
ïðîãðàììèðîâàíèè.
|