PHP: Записване на информация за потребителите - Webagent
Възможността за запис на файлове в php прави лесно събирането на информацията за потребители, посетители уеб страница, и може да помогне при изработването на уеб сайт.

Особено интерес представлява да знаем как посетителите са достигнали до страницата, може да го разберете, като запишете стойността на променливата на php обкръжението HTTP_REFERER. Тя запазва url адреса на страницата, съдържаша хипервръзката, чрез която потребителя е посетил вашата страница.

Можете да разберете колко често един потребител посещава вашата страница, като запишете ip адреса му.Той се съхранява в променливата на обкръжението REMOTE_ADDR.


Структура:
/index.php
/user.php
/search.php
/user.inc
/user.txt
/nomer_user.inc



Ползваме най-обикновен код който показва в момента кой е Online (можете да полвате най-различни или с каквото разполагате)

//index.php



<?
$file = "user.txt";
$expire = "30";
$ip = $_SERVER['REMOTE_ADDR'];
$vreme=date("d F Y, H:i");
$str=getenv("HTTP_REFERER");
$klient=getenv("HTTP_USER_AGENT");

if (!$open = fopen($file,'a')) { echo "No database"; }

$a = file($file);
$open = fopen($file,'w');
if (count($a) == "0") { fwrite($open, "$ip|" . "$vreme"); }
else {
foreach($a as $show) {
$part = explode("|", $show);
if ($part[1]+$expire <= time()) { }
else {
if ($ip == $part[0]) { }
if ($vreme == $part[2]) { }
else { fwrite($open, "$show"); }
}
}
fwrite($open, "$ip|" . "$vreme");
}
fclose($open);
echo " " . count(file($file)) . " user";


//Тук скрипта брои
if (file_exists("nomer_user.inc"))
{
$fp = fopen ("nomer_user.inc" ,"r");
$nomer= fgets($fp,999);
fclose($fp);
$nomer=$nomer+1;
$fp = fopen ("nomer_user.inc" ,"w");
fwrite($fp, $nomer);
fclose($fp);
}
else
{$nomer=1;
$fp = fopen ("nomer_user.inc" ,"w");
fwrite($fp, $nomer);
fclose($fp);
}

//На тези редове се подреждат базата данни
$db=$nomer.'&'.$vreme.'&'.$ip.'&'.$klient.'&'.$str." \n";
$fp = fopen ("user.inc" ,"a");
fwrite($fp, $db);
fclose($fp);

?>


$nomer
С негова помощ броим редовете

$ip = $_SERVER['REMOTE_ADDR'];
взима ip адреса на посетителя
и го присвоява на променливата, ($ip)

$vreme=date("d F Y, H:i");
Записва датата, ($vreme)

$str=getenv("HTTP_REFERER");
Записва страницата от която е достигнато до сайта, ако е записано в браузъра няма да съдържа стойност, ($str)

$klient=getenv("HTTP_USER_AGENT");

Присвоява информацията за браузъра който е ползвал потребителя, ($klient)

От този файл се записват няколко файла.Първият е user.txt от него се вижда в момента кой е оnline
84.242.156.50|07 November 2005, 01:52


Следващият файл е nomer_user.inc с него ще се брои

Последният файл е user.inc това ние базата данни.Файла изглежда по този начин
1&07 November 2005, 01:49&84.242.156.50&Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)&
2&07 November 2005, 01:49&84.242.156.50&Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)&
3&07 November 2005, 01:49&84.242.156.50&Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)&
4&07 November 2005, 01:50&84.242.156.50&Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)&http://www.web-tourist.net/forum/viewtopic.php?t=4&start=15
5&07 November 2005, 01:52&84.242.156.50&Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)&


Но ще трябва да кажа, защо ще се записва всеки човек на различен ред и защо всички данни за
него ще се разделят с &
Както виждате, данните са подредени в някакъв ред, въпреки че това е прост текстов файл.
Ясна е идеята - данните на различни хора са записани на различни редове, а
самите данни са разделени с някакъв знак(в случая &).

Ето и скрипта, който ще показва всичките записи :
//user.php
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body>
<FORM ACTION="search.php" METHOD=POST>
<INPUT TYPE="text" NAME="search" value="" size="15" maxlength="15">
<INPUT TYPE=submit value=Search >
</FORM>

<?php
//функцията file("user.inc") ще отвори файла и ще го раздели на редове
//като всеки ред ще бъде елемент от масива $file

$file= file("user.inc");
//Функцията count($file) ще даде(върне) броя на елементите в масива $file,
//а променливата $n ще е равна на броя на тези елементи

$n=count($file);
$zapis='';
if ($n>100)
{
$fp = fopen ( "user.inc" ,"w");
fwrite($fp, $zapis );
fclose($fp);
}
echo '<table border="1" cellspacing=0 cellpadding=3 width="100%" align="center">
<tr> <td><b>№</b></td>
<td><b>Дата</b></td>
<td><b>IP-address </b></td><td><b>Браузър и ОС</b></td> <td><b>Адрес</b></td>
</tr>
';
for ($i=0; $i<$n;$i++)
{
//Функцията explode разделя реда на части, като за разделител ползва знака &
//всяка част от реда става елемент от масива $line .

$line = explode ("&",$file[$i] );
//елементите на масива се подреждат в таблица
echo '
<tr>
<td>'.$line[0].'</td><td >'.$line[1].'</td><td>'.$line[2].'</td><td>'.$line[3].'</td><td>'.$line[4].'</td>
</tr>';
}
?>



Сега идва ред и на търсачката:
Ето кода на файла
//search.php

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">


</head>
<body >


<FORM ACTION="search.php" METHOD=POST>
<INPUT TYPE="text" NAME="search" value="" size="15" maxlength="15">
<INPUT TYPE=submit value=Search > </FORM>
<?php

//$search - приема стойноста на търсената дума

$search=$HTTP_POST_VARS['search'];
//функцията str_replace(" ","",$search) маха всички бели полета около търсената дума
//за да не се обърква търсачката :


$search=str_replace(" ","",$search);
if ($search=='')
{exit;}
$file= file("user.inc");
$n=count($file);
echo '<table border="1" cellspacing=0 cellpadding=3 width="100%" align="center">
<tr>
<td><b>№</b></td><td><b>Дата</b></td>
<td><b>IP-address </b></td><td><b>Браузър и ОС</b></td>
</tr>
';
//с for обхождаме редовете

for ($i=0; $i<$n;$i++)
{
//От всеки ред, който ще се сравнява с търсената дума се махат
//последователно белите полета, знака & и знака за нов ред

$file1=$file[$i];
$file1=str_replace(" ","",$file1);
$file1=str_replace("&","",$file1);
$file1=str_replace("\n","",$file1);

//ако намери съответствие го показва в таблицата

if (eregi($search,$file1))
{
$line = explode ("&",$file[$i] );
echo '
<tr>
<td>'.$line[0].'</td><td>'.$line[1].'</td><td>'.$line[2].'</td><td> '.$line[3].'</td>

</tr>';

}
}

?>
</table>
<br>
<a href=user.php>Всички записи</a><br>

</body> </html>


Демо:





Урока е подготвен специално за http://web-tourist.net

/ Трябва да сте регистриран за да напишете коментар /
От: BorislawBotew
3:26 05-02-2011
Много полезно :)
1