Autor Zpráva
Trdlo
Profil *
Zdravím, snažím se použít fci gzfile() na 3MB soubor a vypisuje to:
Fatal error: Allowed memory size of 57671680 bytes exhausted (tried to allocate 31 bytes) - chyba je samozřejmě na tom řádku, kde je gzfile()
kód snad nemusím vypisovat je tam prostě jen:
$lines = gzfile("file.txt.gz");

Nejdivnější je, že soubor 2,28MB to rozbalí krásně.
Na webhostingu je v php.ini memory_limit 55M , což odpovídá tomu "Allowed memory size of 57671680 bytes" v té chybové hlášce.
Přece nemůžu chtít zvýšit paměť kvůli 3MB!
To je tak fce gzfile() opravdu tak paměťově náročná? Co když bude mít ten soubor "file.txt.gz" jednou 5MB - to budu potřebovat 100MB paměti pro PHP?
Nemá s tím někdo zkušenosti?
Předem díky.
P.S. nevím jestli to s tím souvisí, ale rozpakovávám tím PHP postupně 5 souborů (2,28MB ; 41kB ; 113kB ; 3MB ; 14kB). Když ten 3MB odkomentuji, tak je to všechny v pohodě rozbalí, ale ten 3MB to nerozbalí ani, když ho rozbaluji samostatně (že mám v PHP souboru jenom ten jeden řádek).
Kajman_
Profil *
Pamět zaberou rozbalená data, která budou mnohem větší. Musíte celý rozbalený soubor dávat do paměti? Co použít např.
http://www.php.net/manual/en/function.gzread.php
Kajman_
Profil *
Nebo
http://www.php.net/manual/en/function.gzgets.php
Trdlo
Profil *
Kajman_: zatím díky, jdu to ověřit.
Trdlo
Profil *
Tu funkci gzfile() jsem použil, protože mi to pěkně načetlo do pole. Nedá se nic dělat, tak jsem musel překopat celý kód a vypisovat to po řádcích. Možná byl problém i v tom poli, že bylo tak obrovské. Takže, Kajman_, díky za tip http://www.php.net/manual/en/function.gzgets.php , funguje to.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: