Ik heb zelf een email client gemaakt die redelijk goed werkt (al zeg ik het zelf
)
Tenminste...alles verliep soepel, totdat er vandaag iemand een mailtje met 10 plaatjes kreeg die in totaal zo'n 1.6MB vertegenwoordigen.
Omdat de mails van de mailserver verwijderd worden (en in de database opgeslagen) en ik toch nog een beetje huiverig ben voor fouten maak ik van iedere mail (alvorens ik 'm van de mailserver laat verwijderen) een backup. Op die manier kan ik altijd nog iets terughalen mocht er iets verkeerd gaan. (de mails worden namelijk in verwerkte form in de mail-tabel opgeslagen.
stukje code dat de backup doet:
Nou trad daar in eerste instantie ook de fout op:
Bij herhaling blijkt alleen dat die exhaust random plaatsvindt met random groottes (omdat het backuppen mislukt wordt de mail niet van de server verwijderd namelijk).
Ik heb boven regel 313 even een regel toegevoegd, waarbij ik de query zelf heb weggelaten in de mail, en alleen de error naar mezelf toemail en die zegt dan vervolgens:
MySQL server has gone away
Nouja...ik weet eigenlijk niet zo goed wat ik hier mee moet. Wat kennelijk het geval is, is dat php het niet trekt dat die strings zo groot zijn waarmee gewerkt wordt.
Maar hoe kan ik dit dan op een goede manier backuppen?
Tenminste...alles verliep soepel, totdat er vandaag iemand een mailtje met 10 plaatjes kreeg die in totaal zo'n 1.6MB vertegenwoordigen.
Omdat de mails van de mailserver verwijderd worden (en in de database opgeslagen) en ik toch nog een beetje huiverig ben voor fouten maak ik van iedere mail (alvorens ik 'm van de mailserver laat verwijderen) een backup. Op die manier kan ik altijd nog iets terughalen mocht er iets verkeerd gaan. (de mails worden namelijk in verwerkte form in de mail-tabel opgeslagen.
stukje code dat de backup doet:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| $query = "INSERT INTO mail_backup( mail_id, str_header, str_structure, obj_header, obj_structure) VALUES ( '".$this_id."', '".$full_header."', '".$full_structure."', '".addslashes(serialize($headers))."', '".addslashes(serialize($structure))."')"; if (!$result = mysql_query($query)) { mail("mijn@email.nl", "Error met opslaan van backup-mail", $query."\n".mysql_error()); $display_message .= "het opslaan van de backup is mislukt (".$this_id.")<br>\n"; } |
Nou trad daar in eerste instantie ook de fout op:
die 313 is toevallig de regel waar die mail() plaatsvindt. Het backuppen mislukt dus ook. De mail zelf is echter wel succesvol geparsed, opgeslagen en de attachments ook (die koppel ik los en sla ik op de harde schijf van de server op)Fatal error: Allowed memory size of 9823800 bytes exhausted at (null):0 (tried to allocate 2301875 bytes) in /home/virtual/site1/fst/var/www/html/database/mail/functions.php on line 313
Bij herhaling blijkt alleen dat die exhaust random plaatsvindt met random groottes (omdat het backuppen mislukt wordt de mail niet van de server verwijderd namelijk).
Ik heb boven regel 313 even een regel toegevoegd, waarbij ik de query zelf heb weggelaten in de mail, en alleen de error naar mezelf toemail en die zegt dan vervolgens:
MySQL server has gone away
Nouja...ik weet eigenlijk niet zo goed wat ik hier mee moet. Wat kennelijk het geval is, is dat php het niet trekt dat die strings zo groot zijn waarmee gewerkt wordt.
Maar hoe kan ik dit dan op een goede manier backuppen?