[php] IMAP: attachments opslaan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik wordt er een beetje scheel van.. ik heb een script wat automatisch mailtjes via IMAP moet fetchen en in een db moet opslaan. Ik heb geen in weet-ik-het-hoeveel GB's aan attachments in de db, dus deze wil ik los opslaan op de harddisk.

Eerst maar even wat ik al heb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
for($x=$total;$x>$total-10;$x--) {
    /* Fetch IMAP structure */
    $imap_headers = imap_header($inbox, $x);
    $imap_structure = imap_fetchstructure($inbox, $x);

    /* Save all attachments */
    $parts = $imap_structure->parts;
    for($i=0;$i<sizeof($parts);$i++) {
        /* Only save if an attachment */
        if((isset($parts[$i]->disposition)) && ($parts[$i]->disposition == "attachment")) {
            /* Fetch filename */
            if((isset($parts[$i]->dparameters)) && (sizeof($parts[$i]->dparameters) > 0)) {
                foreach($parts[$i]->dparameters as $p) {
                    if($p->attribute == "filename") {
                        $filename = $p->value;  
                    }
                }
                /* Write file */
                $fp2 = fopen("../attachments/".time()."-".$filename, "w");
                fwrite($fp2, imap_fetchbody($inbox, $x, $parts[$i]));
                fclose($fp2);
            }
        }
    }


Op zich gaat alles goed. Alle variabelen worden gevonden. Het bestand op de schijf wordt aangemaakt, maar blijft vervolgens 0 bytes groot. Iemand die me even een duw in de goede richting kan geven?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
uhm, kan een modje even moven? kwam door de macht der gewoonte in NOS terecht :)

Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Volgens mij (en volgens jouw topictitel) is dit php, iets wat in P&W hoort dacht ik :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Volgens mij moet je "wb" (binary write) gebruiken ipv "w" bij het openen van de file. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 07 juni 2004 @ 13:06:
Op zich gaat alles goed. Alle variabelen worden gevonden. Het bestand op de schijf wordt aangemaakt, maar blijft vervolgens 0 bytes groot. Iemand die me even een duw in de goede richting kan geven?
Even een echo doen van de body om te kijken of je die wel goed binnenkrijgt?
En time() is in seconden, dus als je binnen een seconde twee keer dezelfde filename tegenkomt heb je een probleem.
Kun je niet beter de hash van de content als filename gebruiken?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NMe84 schreef op 07 juni 2004 @ 13:15:
Volgens mij moet je "wb" (binary write) gebruiken ipv "w" bij het openen van de file. :)
Inderdaad, maar zover was ik nog niet, het bestand bleef 0 bytes. Ben er inmiddels wel achter wat het probleem was:

code:
1
fwrite($fp2, imap_fetchbody($inbox, $x, $parts[$]));


moest natuurlijk

code:
1
fwrite($fp2, imap_fetchbody($inbox, $x, $i+1));


zijn :) Nu zit ik alleen nog met 1 probleem; schrijven doet ie nu wel, maar de output lijkt verneukt: http://t-x.dignus.nl/~dignus/1086607059-00000177.JPG. En geloof me.. das niet de originele foto. fopen met "w" of "wb" maakt geen verschil.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
base64_decode?

http://t-x.dignus.nl/~dignus/1086607059-00000177.JPG

[ Voor 67% gewijzigd door Olaf van der Spek op 07-06-2004 13:28 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Pagina: 1