Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Nova godina - novi problemi (memorijski limit preokoracen!)

[es] :: PHP :: Nova godina - novi problemi (memorijski limit preokoracen!)

[ Pregleda: 1445 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kelja

Član broj: 70429
Poruke: 1416
77.46.194.*



+35 Profil

icon Nova godina - novi problemi (memorijski limit preokoracen!)01.01.2008. u 14:38 - pre 198 meseci
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)?
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
89.216.108.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: Nova godina - novi problemi (memorijski limit preokoracen!)01.01.2008. u 14:56 - pre 198 meseci
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.
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
77.46.194.*



+35 Profil

icon Re: Nova godina - novi problemi (memorijski limit preokoracen!)01.01.2008. u 14:59 - pre 198 meseci
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]
 
Odgovor na temu

glavince
Ohrid/Macedonia

Član broj: 66412
Poruke: 246
79.141.120.*

Sajt: ohridnews.com


Profil

icon Re: Nova godina - novi problemi (memorijski limit preokoracen!)01.01.2008. u 21:21 - pre 198 meseci
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.
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
77.46.194.*



+35 Profil

icon Re: Nova godina - novi problemi (memorijski limit preokoracen!)01.01.2008. u 23:02 - pre 198 meseci
Prebacio sam na bazu, hvala vam jos jednom. :)
 
Odgovor na temu

[es] :: PHP :: Nova godina - novi problemi (memorijski limit preokoracen!)

[ Pregleda: 1445 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.