_siikais_ Posted January 23, 2010 Report Share Posted January 23, 2010 (edited) 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 January 23, 2010 by _siikais_ Quote Link to comment Share on other sites More sharing options...
2easy Posted January 23, 2010 Report Share Posted January 23, 2010 (edited) es izmantotu fopen() un fgets() vai fscanf() jau sākot no kādiem 5MB (tīri dēļ performances), bet nju 100MB liekas way too much for string/array :D Edited January 23, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted January 23, 2010 Author Report Share Posted January 23, 2010 (edited) 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 January 23, 2010 by _siikais_ Quote Link to comment Share on other sites More sharing options...
2easy Posted January 23, 2010 Report Share Posted January 23, 2010 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 Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted January 23, 2010 Author Report Share Posted January 23, 2010 tur jau tas jokas ka nav zinaama preciiza atrashanaas vieta un taapeec jaaielaadee viss fails jo ja uztasiiis split tad tikpat labi intereseejoshaas log liinijas buus viena sadaliita aloga beigaas un naakoshaa loga sakaumaa... Quote Link to comment Share on other sites More sharing options...
2easy Posted January 23, 2010 Report Share Posted January 23, 2010 (edited) 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 January 23, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted January 23, 2010 Author Report Share Posted January 23, 2010 vieglaak buus caur url iebarot tulkstots reizes charname un log :D ja nu kaadam ir veel labaaks risinaajums uzklausiishu. tikmeer turpinu caur url barot no 1000 ieraxtiem esmu 200 paveicis Quote Link to comment Share on other sites More sharing options...
2easy Posted January 23, 2010 Report Share Posted January 23, 2010 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? Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted January 23, 2010 Author Report Share Posted January 23, 2010 caur get iedodu mainiigo character un logfail peectam attieicigi ieksh loga mekle eto vietu kur ir [$character]AI[ Quote Link to comment Share on other sites More sharing options...
2easy Posted January 23, 2010 Report Share Posted January 23, 2010 izklausās garlaicīgi, ja tas pašam jādara "tulkstots reizes" :D Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted January 23, 2010 Author Report Share Posted January 23, 2010 jaa, bet pagaidaam citu variantu neredzu :D Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.