Autor Zpráva
nethor
Profil
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
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
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
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
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
Roložení řádku pomohlo,
$str je lokální ve fci takže to nevadí.
Díky!

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:

0