| Autor | Zpráva | ||
|---|---|---|---|
| nethor Profil |
#1 · Zasláno: 8. 3. 2010, 20:36:50 · Upravil/a: nethor
Pokouším se posílat přes class.phpmailer.php v příloze soubor cca 4MB
A hází mi to hlášku Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 6223713 bytes) in {........}/class.phpmailer.php on line 1262
Memory limit je nastavený na 16MB - přiložený soubor se tedy snad do paměti vpohodě vejde. (..a jinak se sním nepracuje nebo ano?) Jak to, že nestačí paměť , resp. nevíte někdo jak to řešit? Předem díky. |
||
| Joker Profil |
#2 · Zasláno: 8. 3. 2010, 22:39:36
nethor:
Jsou dvě cesty: Snížit paměťové nároky skriptu, nebo zvýšit limit paměti pro skripty :-) Mimochodem, tried to allocate 6223713 bytes - skript se snažil si přidělit dalších 6MB paměti, takže zjevně tam nějaká operace je dost náročná na paměť. |
||
| nightfish Profil |
#3 · Zasláno: 9. 3. 2010, 07:23:27
nethor:
„přiložený soubor se tedy snad do paměti vpohodě vejde.“ pokud se 4 MB soubor zakóduje pomocí base64, má výsledný soubor velikost ~ 5.3 MB pokud jako quoted-printable, tak ještě víc (max. 12 MB) možná by se stálo za to podívat do class.phpmailer.php na řádek 1262 a zjistit, co se tam děje (případně co se děje v blízkém okolí) |
||
| nethor Profil |
#4 · Zasláno: 9. 3. 2010, 08:50:46
Na ř. 1262 je
$encoded = chunk_split(base64_encode($str), 76, $this->LE); (Aha, takže se spřílohou pracuje.) Nejspíš to má tedy na svědomí fce base64_encode (nebo chunk_split ?), Ostatní kódování (7bit 8bit binary quoted-printable) jsem nerozchodil vůbec (poškozená příloha). .. no aspoň už vím proč to nejde, dík. |
||
| nightfish Profil |
#5 · Zasláno: 9. 3. 2010, 09:16:28 · Upravil/a: nightfish
nethor:
$str bude 4 MB výstup base64_encode zhruba těch 5.3 MB a chunk_split bude ještě o trochu víc než 5.3 MB (tipuju 5.9 MB) a dohromady to leze přes limit řešením je buď neposílat tak velké přílohy mailem a nebo upravit zdrojáky phpmaileru... 1) soubory kódovat po částech (třeba po 512 kB), mezivýsledky ukládat na disk nebo 2) možná by stačilo rozdělit řádek 1262 na čtyři... $b64 = base64_encode($str); unset($str); $encoded = chunk_split($b64, 76, $this->LE); unset($b64); (s tím, že přijdeš o obsah proměnné $str, takže je nutné, aby nikde dál nebyla použita) |
||
| nethor Profil |
#6 · Zasláno: 9. 3. 2010, 11:25:34
Roložení řádku pomohlo,
$str je lokální ve fci takže to nevadí. Díky! |
||
|
Časová prodleva: 17 let
|
|||
0