script php nn salva allegati mail

Ciao a tutti,

Come da oggeto del post ho un problema nel salvare gli allegati..

questo è il codice per visualizzare gli allegati:

$structure = imap_fetchstructure($inbox, $id);

$structure=imap_fetchstructure($inbox, $id);

if(isset($structure->parts)) {

echo "<tr><td>Allegati:</td><td>";

while(list($key,$val) = each($structure->parts)) {

if($key > 0) {

if($val->ifparameters) {

$attach=$val->parameters;

echo "<a href='gotodownload.php?id=$id&part=$key' TARGET=blank>";

$attachmenttext=$attach[0]->value;

$attachmenttext=str_replace("US-ASCII", "HTML/HTM Document", $attachmenttext);

$attachmenttext=str_replace("us-ascii", "HTML/HTM Document", $attachmenttext);

echo $attachmenttext;

echo "</a>,&nbsp;";

} else {

echo "<a href='gotodownload.php?id=$id&part=$key' TARGET=blank>";

echo "(unnamed)</a>&nbsp;<br>";
}}
}}

if(isset($structure->parts)) {

$body=imap_fetchbody($inbox, $id,1);

} else {

$body=imap_body($inbox, $id);

}
$partone = $structure;
$parttwo = $partone->parts[0];
if($parttwo->encoding == 3) {

$ambody = imap_base64($body);
}

e questo è gotodownload.php

$mimetype=array("text","multipart","message","application","audio","image","video","other");



$structure=imap_fetchstructure($inbox, $id);

$attach_body = imap_fetchbody($inbox, $id,$part+1);

$atype=$structure->parts[$part]->type;

if($atype=="") $atype=0;

$asubtype=$structure->parts[$part]->subtype;

if($asubtype == "") $asubtype='PLAIN';

$attach_type=$mimetype[$atype]."/".$asubtype;

$attach_name=$structure->parts[$part]->parameters[0]->value;

if($attach_name = "") $attach_name='(unnamed)';



$anencode=$structure->parts[$part]->encoding;

if($anencode == 3){

$return_content=imap_base64($attach_body);

} elseif($anencode == 4) {

$return_content=imap_qprint($attach_body);

} else {

$return_content=$attach_body;

}

header("Content-type: $attach_type");

if(($atype != 0) && ($atype != 5)){

header("Content-Disposition: attachment; filename=$attach_name");

}

echo $return_content;

quando clikko sul link dell'allegato, mi fa salvare o aprire il file gotodownload.php, invece dell'allegato!

Avete qualche consiglio?

Grazie

inviato 9 anni fa
dearste
X 0 X

Cioè vedi il codice dello script e non l'allegato?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

No, vedo il link con il nome dell'allegato, ma quando clikko per scaricarlo, lo script mi fa salvare il file gotodownload.php, invece che il file!

è probabile che ci sia un problema di variabili qui:

header("Content-Disposition: attachment; filename=$attach_name");
risposto 9 anni fa
dearste
X 0 X

Hai provato a vedere se il file "gotodownload.php" che scarichi in realtà è il vero allegato ma con il nome del file sbagliato? Prova a saricarlo e a rinominarlo correttamente e vedi se riscei ad aprirlo.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Esatto! se lo salvo e lo rinomino riesco ad aprirlo!..

ma allora dove sta l'errore?

risposto 9 anni fa
dearste
X 0 X

Prova a sostituire:

header("Content-Disposition: attachment; filename=$attach_name");

con

header("Content-Disposition: attachment; filename=\"$attach_name\"");

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
modificato 9 anni fa
X 0 X

fatto, mi salva sempre la pagina php... :'(

risposto 9 anni fa
dearste
X 0 X

verifica il contenuto della variabile $attach_name, contiene il nome corretto del file?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ho provato a fare

echo $attach_name;

ma nn mi stampa niente...quindi il contenuto della variabile $attach_name è errato...

ma nn riesco a capire dove stà l'errore....qualche idea?

risposto 9 anni fa
dearste
X 0 X

ho provato a fare

echo $attach_name;

ma nn mi stampa niente...quindi il contenuto della variabile $attach_name è errato...

ma nn riesco a capire dove stà l'errore....qualche idea?

è strano che $attach_name sia vuoto, infatti questo IF dovrebbe comunque valorizzare la variabile:

if($attach_name = "") $attach_name='(unnamed)';

sai come vedere gli header inviati al browser?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

NO, non lo so, non sono molto esperto col php..come??

risposto 9 anni fa
dearste
X 0 X

scaricati Firefox e questo plugin (http://livehttpheaders.mozdev.org/) e poi prova a scaricare l'allegato. Una particolare opzione del browser ti mostrerà gli header scambiati tra browser e server

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ecco qui il risultato:

l'allegato non ha nome!!

risposto 9 anni fa
dearste
X 0 X

Forse l'errore è banale. Cambia:

if($attach_name = "") $attach_name='(unnamed)';

in

if($attach_name == "") $attach_name='(unnamed)';

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

EHEH!

ora funzia, ma mi dà ancora 2 problemi...

1) - ho un allegato dal nome "04 - CIAO.MP3" ....lo script mi salva un file dal nome "04.MP3" ..come mai??

2) - con file molto grossi, il file gotodownload.php mi dà questo errore:

Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to allocate 9141813 bytes) in /web/htdocs/www.xxx.it/home/webmail/gotodownload.php on line 33

Graze in anticipo!

risposto 9 anni fa
dearste
X 0 X

Per il primo problema prova a fare così:

header("Content-Disposition: attachment; filename=\"$attach_name\"");

il secondo invece dipende dal fatto che tutto l'allegato viene prima caricato in una variabile e poi inviato al browser, quindi lo script PHP occupa la memoria del server per almeno la dimensione dell'allegato e se questo è grande fa scattare il "limitatore" di PHP che può essere disabilitato ma....

Per risolverlo dovresti evitare di caricare la variabile e mandare l'allegato direttamente al browser

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ho risolto inserendo all'inizio del codice questo:

<?php

ini_set(memory_limit,16M);

?>

ora funziona tutto alla grande!

Grazie infinite!

risposto 9 anni fa
dearste
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda