Jag håller på att parsar handhistorie filer 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.
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:
Jag upptäckte nu en liten ledtråd.
Jag har haft Charles debugging proxy på medans jag har testat och nu då jag körde utan så visar firefox en "connection reset" sida då skriptet dör.
Jag testade även att ändra så jag läser in filen med cURL istället, men den stannar precis på samma ställe.
Forfarande inte en aning om vad det är som spökar.
En märklig upptäckt är att om jag kör fler echo's i koden så kör skriptet längre vilket gör att jag undrar om det verkligen är en resurs som tar slut.
Jag har även testat att ta bort den kod som sparar datan i en array samt databaskoden, men skriptet kör precis lika långt då.
Detta är det jag testat att ändra på i php.ini, men ingen av de inställningarna gör någonsomhelst skillnad:
pcre.backtrack_limit = 1000000
pcre.recursion_limit = 1000000
ignore_user_abort = On
max_execution_time = 120
max_input_time = -1
memory_limit = -1
Hilfe!
344 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e