FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Jag håller på att parsar handhistoriefiler för poker och efter mycket slit så har jag fått ihop ett system som fungerar bra, men med ett mycket besvärligt undantag.
Då text filerna blir stora så dör skriptet innan det är klart. Filerna är inte jättestora och problemet visar sig innan de nått 100k. Systemet är en state machine där jag använder file_get_contents för att läsa in hand för hand (en 20-30 rader åt gången) för att sedan köra en loop med olika "states" som har diverse reguljära uttryck för att extrahera informationen. Informationen sparas sedan i en array och då en hand är färdig parsad sparas den i en MySQL databas. Sedan rensar jag arrayerna och börjar på nästa hand. Enligt memory_get_usage så använder skriptet drygt 5 Mb då det dör. Jag har testat att höja memory limit till 100M, men det gör ingen skillnad. Skriptet jobbar bara i några sekunder innan det dör och timeout är satt till 120s. PHP ger inte ger mig inte någonting att gå på vad det är som får skriptet att dö, varken varningar eller felmeddelanden. I firefox kör skriptet en 4 sekunder och sedan dyker det upp en "connection reset" sida. I IE dyker det upp en "page not available" sida efter någon sekund. Det bästa hade väl varit att läsa linje för linje, men det blir lite knepigt att ändra i detta stadium med det system jag använder. Och man tycker att en 20-30 linjer åt gången inte borde vara några problem alls. Är det några resursinställningar i PHP eller apache som jag kan fixa problemet? Koden jag använder för att läsa in en hand från textfilen är: Kod:
file_get_contents($filename, FALSE, NULL, $offset, $end) |
||
![]() |
![]() |
|
|