[ kelja @ 01.01.2008. 14:38 ] @
Napravio sam neki mali hit counter, koji koristi obican text file za belezenje poseta(i narocito ip adresa). Evo koda:
Code:

<?php
session_start();
//$hits=file('file_long.txt');
$site="http://www.sinisake.com/hit_counter/" ; //enter your site name
$ip = GetHostByName($_ENV['REMOTE_ADDR']);
/*for($i=0;$i<count($hits);$i++){
$counted=$i+1;
if(eregi($ip,$hits[$i])){
$ip_exists=1;
}
}*/
$handle = @fopen('file_long.txt', "r");
if ($handle) {
$i=0;
   while (!feof($handle)) {
       $lines[] = fgets($handle);

       $i++;
       $counted=$i;
   }
   fclose($handle);
}

if($_SESSION['visited']==1||$_COOKIE['Visited']!=""||$ip_exists==1){
$been_here=1;
}

if($been_here!=1){
$fp = fopen ("file_long.txt", "a+");
fwrite ($fp, "||$ip\n");
fclose ($fp);
}

if(!isset($_COOKIE['Visited'])){
setcookie("Visited","$site",time()+60*60*24*300000);
}
if(!isset($_SESSION['visited'])){
$_SESSION['visited']=1;
}
/*
echo $_SESSION['visited']."<br>";
echo $_COOKIE['Visited']."<br>";
echo $ip_exists."<br>";
*/

?>
<style type="text/css">
#holder{
font:Arial, Helvetica, sans-serif;
font-size:24px;
}
.black {
color:#121212;
}
.grey {
color:#777777;
}
.light_grey {
color:#D3D3D3;
}
</style>
<?php

//Display Hits/Views!!!
$one_less=$counted-1;
$two_less=$counted-2;
$one_more=$counted+1;
$two_more=$counted+2;
echo "
<div id='holder'>
<div class='light_grey'>$two_less</div>\n
<div class='grey'>$one_less</div>\n
<div class='black'>$counted views so far!</div>\n
<div class='grey'>$one_more</div>\n
<div class='light_grey'>$two_more</div>
</div>\n";
//Display Hits/Views!!!
?>


Znao sam da file funkcija moze da izazove probleme sa velikim fajlovima, pa sam probao i fgets, ali uzalud. Tekst fajl ima 149 205 linija i desava se ovo:
http://www.sinisake.com/index_long.php
Error log file, poslednji upis:
[01-Jan-2008 13:46:04] PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1048576 bytes) in /.... on line 16

Da li je ovo normalna pojava za shared hosting? Zar je 149 205 linija(~1,5 mb) zaista previse za citanje red po red?
Da napomenem, sa fajlovima ispod i oko 1 mb(oko 100 000 linija), sve funkcionise ok, ali kad prekoracim te vrednosti, vidite i sami...
Da menjam hosting, ili koncepciju skripta(hteo bih da izbegnem bazu, zaista sam mislio da je u ovom slucaju suvisna)?
[ dakipro @ 01.01.2008. 14:56 ] @
Definitivno menjaj koncepciju, ni na jednom hostu ti ovo nece raditi dobro, pogotovu sto ti se sadraj fajla stalno povecava, pa ces kad tad dostici bilo koji limit.
A baza ti ovde nije lose resenje, mada mozes i da u nekom periodu promenis fajl u kome pises, ali opet mislim da je baza pravo resenje, jer je insert u bazu naspram inserta u ovoliki txt fajl nemerljivo brzi.
[ kelja @ 01.01.2008. 14:59 ] @
Hvala, dakipro.
Nisam dosada imao iskustva sa ovolikim tekst fajlovima, a nece ni taj kome ovo radim imati 100 000 + poseta, al' hajde...
Ipak, nije mi izgledao da je ~150 000 linija previse.

[Ovu poruku je menjao kelja dana 01.01.2008. u 16:13 GMT+1]
[ glavince @ 01.01.2008. 21:21 ] @
Dakipro je u pravu.
Al ako bas zelis taj txt mozes da koristis " ini_set('memory_limit', 'X M'); ".
Al na vecinu servera ova funkcija je zabranjena.
[ kelja @ 01.01.2008. 23:02 ] @
Prebacio sam na bazu, hvala vam jos jednom. :)