Jump to content
php.lv forumi

Memory limits


_siikais_

Recommended Posts

Taatad probleema nakaoshaa!

scripta dalja

$fails  = './ibase.txt';
$masivs = file($fails);
foreach ($masivs as $k => $data) { //foreach itemu masiivs
   list($type,$id,$name)=sscanf($data, "%d %d %s");
   $itemas[$name]=array ('type'=>$type,'id'=>$id);
}

$fails  = './characters.txt';
$masivs = file($fails);
foreach ($masivs as $k => $data) {  //foreach char masiivs
   list($logname,$char)=sscanf($data, "%s %s");
   $fails  = './LOG/'.$logname.'.log';
   $masivs = file($fails);

}

probleema ir tajaa ka foreach char masiivs iziet pirmo rinjkji un izdara savus darbus, bet tikliidz vinjam jaakjeras klaat nakaoshajam char vinjsh izmet Fatal error: Out of memory pie log ielasiishanas

limitu memory_limit esmu mainiijis no 1024M liid zpat 10024M un arii ar -1 nav atshkjiriibas visu laiku met fatal eror out of memory (mainiiju ar visiem 3 veidiem un bez rezultaata)

uzliku eaccelerator tad izdevaas vismaz 3 character apstradaat

log failu izmeers ir no 100MB liidz pat 800MB.

ar unset($masivs) un $masivs=array() pirms jauna log faila nolasiishanas nepaliidz.

 

Paldies jau ieprieksh.

Edited by _siikais_
Link to comment
Share on other sites

nu ar fopen un fgets kaut vienu failu vinjsh apstradaa veselu muuzhiibu...

kameer iet runa par viena faila apstradei ar manuaali izmainiitu char un logname tikmeer viss ir kaartiibaa

un bez array nevar iztikt jo vajag logu lasiit no beigaam, vai arii ir kaadam kaads cits labaaks risinaajums loga nolasiishanai no beigaam.

 

 

respektivii veelamais ko gribu panaakt ir lasot logu no beigaam atrast noteiktas peedeejaas liinijas kas satur mekleejamo string un apstradaat

Edited by _siikais_
Link to comment
Share on other sites

ja interesē tikai faila beigas, tad arī no faila beigām var ielasīt blāķi ar datiem (kkādus MB) un tos apstrādāt atsevišķi no pārējā faila. vnk jānopizicionē faila lasīšana "netālu" no beigām

function readLastBytes($sP, $iSize) {
$h = fopen($sP, 'r');
fseek($h, -1 * $iSize, SEEK_END);
$s = fread($h, filesize($sP));
fclose($h); return $s;
}
$s = readLastBytes('data.txt', 10000000);  // nolasa apmēram ~10MB no faila beigām

jebkurā gadījumā parasti lielus datu apjomus apstrādā pa daļām, nevis taisa mega apjomīgas string/array konstrukcijas iekš servera RAM

Link to comment
Share on other sites

algoritms:

1) pirms sāc kko split, vispirms ar strpos() pārbaudi, vai tikko no faila nolasītajā stringā ir meklējamais teksts

2) ja ir, tad split un ej uz to rindu un dari, ko tev tur vajag izdarīt

3) ja nav, atrodi, kur beidzas pirmā rindiņa šajā stringā (arī ar strpos() meklē "\n"), lai nākamo file read taisītu, iekļaujot šo nepilno rindiņu (ja nu gadījumā tur ir meklējamais teksts)

4) read nākamo porciju un sāc no 1)

Edited by 2easy
Link to comment
Share on other sites

limitu memory_limit esmu mainiijis no 1024M liid zpat 10024M un arii ar -1 nav atshkjiriibas visu laiku met fatal eror out of memory

...

log failu izmeers ir no 100MB liidz pat 800MB

pat ja tavam serverim būtu 128GB RAM, un php to visu aizpildītu (bez swappošanas uz hdd - VRAM) ar kkādiem datiem, lai pēc tam tur kko meklētu, tas anyway nedotu nekādu būtisku ieguvumu, salīdzinot ar faila lasīšanu pa daļām un meklēšanu katrā daļā atsevišķi

 

nez, vai ir tik daudz variantu, kā failā kko meklēt

vsp man arī interesē, ko koda dievi varēs ieteikt ^^

 

vieglaak buus caur url iebarot tulkstots reizes charname un log :D

hmm, kā izpaužas tā barošana caur url? ko tu dari?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...