Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Community > Tech
 
[php]problema con upload e allegati
Clicca QUI per vedere il messaggio nel forum
fulminato1
ho un problema con questo script:


code:
PHP:

<?php
if ($_REQUEST['Invia']) {
        
//echo $file;
        //aggiungo gli allegati
        
copy(&quot;$file&quot;,&quot;$file_name&quot;);
        include (&
quot;class.phpmailer.php&quot;);
        
//creazione istanza phpmailer
        
$mail = new phpmailer();
        
//seleziona il protocollo SMTP come modalità di spedizione
        
$mail->IsSMTP();
        
//nome dominio
        
$mail->Host = &quot;smtp.nuovacarrozzeriastella.it&quot;;
            
//segnala che è richiesta l autenticazione
        
$mail->SMTPAuth TRUE;
        
//indicazione nome utente e password
        
$mail->Username 'preventivi@nuovacarrozzeriastella.it';
        
$mail->Password '***';
        
//mittente
        
$mail->From $_REQUEST['From'];
        
$mail->FromName $_REQUEST['FromName'];
        
//$mail->From = &quot;preventivi@nuovacarrozzeriastella.it&quot;;
        //$mail->FromName = &quot;preventivi stella&quot;;
        //destinatario
        //$mail->AddAddress($_REQUEST['TO'], $_REQUEST['ToName']);
        
$mail->AddAddress('preventivi@nuovacarrozzeriastella.it');
        
//aggiungo gli allegati
        //@copy(&quot;$file&quot;,&quot;foto/$file_name&quot;);
        //$mail->AddAttachment('68.png');
        
$mail->AddAttachment($file);
        
//echo $file1.&quot;<br>&quot;;
        //$mail->AddAttachment($file2);
        //echo $file2.&quot;<br>&quot;;
        //$mail->AddAttachment($file3);
        //echo $file3.&quot;<br>&quot;;
        //oggetto e testo del messaggio
        
$mail->Subject $_REQUEST['Subject'];
        
$mail->Body $_REQUEST['Message'];
             
//formato testo o html
        
$mail->IsHTML = (boolean) $_REQUEST['FormatoHTML'];
        if(
$mail->IsHTML$mail->AltBody =     strip_tags($_REQUEST['Message']);
        if(
$mail->Send()) {
            echo &
quot;<h2><p>Messaggio inviato con successo!</p></h2>&quot;;
        } else {
            echo &
quot;<p>Errore: &quot;.$mail->ErrorInfo.&quot;</p>&quot;;
        }
    
}
?>

<form method="post" enctype="multipart/form-data"> <table> <tr> <td>Nome del mittente: </td> <td><input type="text" name="FromName" size="40" value="<?= htmlspecialchars($_REQUEST['FromName']) ?>"></td> </tr> <tr> <td>Email del mittente: </td> <td><input type="text" name="From" size="40" value="<?= htmlspecialchars($_REQUEST['From']) ?>"></td> </tr> <!--<tr> <td>Nome del destinatario: </td> <td><input type="text" name="ToName" size="40" value="<?= htmlspecialchars($_REQUEST['ToName']) ?>"></td> </tr> <tr> <td>Email del destinatario: </td> <td><input type="text" name="To" size="40" value="<?= htmlspecialchars($_REQUEST['To']) ?>"></td> </tr> --> <tr> <td>Oggetto: </td> <td><input type="text" name="Subject" size="40" value="<?= htmlspecialchars($_REQUEST['Subject']) ?>"></td> </tr> <tr> <td>Messaggio: </td> <td><textarea name="Message" rows="7" cols="40"><?= htmlspecialchars($_REQUEST['Message']) ?></textarea></td> </tr> <!--<tr> <td></td> <td><input type="checkbox" name="FormatoHTML" <?= $_REQUEST['FromatoHTML'] ? 'checked="yes"' : '' ?>> Invia in formato HTML</td> </tr> --> <tr> <td>Pima foto: </td> <td><input type="file" name="file" size="40"></td> </tr> <!--<tr> <td>Seconda foto: </td> <td><input type="file" name="file2" size="40"></td> </tr> <tr> <td>Terza foto: </td> <td><input type="file" name="file2" size="40"></td> </tr> --> <tr> <td></td> <td><input type="submit" name="Invia" value="Invia messaggio"></td> </tr> </table> </form>



anche se l'istruzione copy va a buon fine, ovvero il file viene uploadato correttamente, quando mi arriva la mail come allegato c è un file chiamato "php(4 numeri).tmp", ninte a che fare con quello originale che volevo inviare.
Partendo dl fatto che sia il comando copy che il comando AddAttachment funzionano correttamente, l'unica cosa che mi è venuta in mente è che quando lo script arriva a AddAttachment probabilmente il file allegato ancora non è stato completamente uploadato.

Come posso risolvere il problema??

Grazie in anticipo

fulminato1
allora??
nessuno che mi può aiutare???

Col. Kurtz
Ma "AddAttachment" non funziona solo con i file presenti sul server?

fulminato1
esatto!
faccio appunto una copy del file sul server nella stessa cartella dello script ma poi mi allega quel file .tmp di cui parlavo prima. ho provato a mettere una echo subito dopo la copy e mi dice che quel file temp si trova nella cartella C:\PHP\uploadtemp\ !!!

secondo me il problema sta proprio nel fatto che quando faccio l AddAttachment, fisicamente il file ancora non è stato uploadato nella mia cartella ma in quella temporanea, anche se ho anche provato a mettere un if con le condizioni di file_exist, is_readable ecc e mi dice che il file c è!
non so proprio come risolvere sto problema!

yeah
Devi usare l'array $_FILES e la funzione move_uploaded_file().
Non ti scrivo codice perchè sono mesi che non programmo in PHP e rischierei di introdurre errori.

Qui spiega proprio come gestire l'invio dei file, è da lì che ho imparato :)

Per la storia del file temp: in pratica quando PHP gestisce gli upload, durante l'esecuzione dello script il file inviato finisce nella directory temporanea e se alla fine dell'esecuzione non è stato spostato, viene cancellato.

Fammi sapere se risolvi o se hai altri problemi :)

[edit] Vorrei aggiungere una nota offtopic: invece di $_REQUEST, usa $_GET o $_POST, così hai più controllo sull'origine dei dati ;)

fulminato1
Originally posted by yeah
Devi usare l'array $_FILES e la funzione move_uploaded_file().
Non ti scrivo codice perchè sono mesi che non programmo in PHP e rischierei di introdurre errori.

Qui spiega proprio come gestire l'invio dei file, è da lì che ho imparato :)

Per la storia del file temp: in pratica quando PHP gestisce gli upload, durante l'esecuzione dello script il file inviato finisce nella directory temporanea e se alla fine dell'esecuzione non è stato spostato, viene cancellato.

Fammi sapere se risolvi o se hai altri problemi :)

[edit] Vorrei aggiungere una nota offtopic: invece di $_REQUEST, usa $_GET o $_POST, così hai più controllo sull'origine dei dati ;)


usando $_FILES il problema rimane, ripeto non è una questione di upload, quello già funzionava da prima, il problema è che nonostante l'argomento della AddAttachment sia lo stesso dell'upload, quindi il file che dopo il comando copy o move_uploaded_file si trova sul server, nella mail come allegato mi ritrovo sempre un file .tmp!

Col. Kurtz
Originally posted by fulminato1
usando $_FILES il problema rimane, ripeto non è una questione di upload, quello già funzionava da prima, il problema è che nonostante l'argomento della AddAttachment sia lo stesso dell'upload, quindi il file che dopo il comando copy o move_uploaded_file si trova sul server, nella mail come allegato mi ritrovo sempre un file .tmp!


Il file .tmp ha le stesse dimensioni di quello originale?

fulminato1
si, ma sta di fatto che io allego delle immagini e alla fine nella mail ho quello .tmp.

DeepBlue
Ti rispondo frettolosamente perché sono al lavoro, per cui potrei anche aver letto male quello che hai scritto.

Il codice che hai quotato, è tutto in un file? altrimenti mi sa che manca l'attributo action nel tag form

Col. Kurtz
Potrebbe essere una questione di "content-type: image/jpg"?

DeepBlue
Originally posted by Col. Kurtz
Potrebbe essere una questione di "content-type: image/jpg"?

Anche io all'inizio avevo avanzato la tua stessa ipotesi, ma suppongo che la coonversione avvenga nella classe AddAttachment.

Vediamo che dice fulminato :)

fulminato1
l action l ho aggiunto dopo:

enctype="multipart/form-data"

esattamente uguale ad un altro form funzionanet che utilizzo per gli upload.

ma il problema rimane.

DeepBlue
e che valore gli hai dato?

Col. Kurtz
Originally posted by DeepBlue
Anche io all'inizio avevo avanzato la tua stessa ipotesi, ma suppongo che la coonversione avvenga nella classe AddAttachment.

Vediamo che dice fulminato :)


La documentazione di php-mailer non dice niente.
Tentar non nuoce.

yeah

usando $_FILES il problema rimane, ripeto non è una questione di upload, quello già funzionava da prima, il problema è che nonostante l'argomento della AddAttachment sia lo stesso dell'upload, quindi il file che dopo il comando copy o move_uploaded_file si trova sul server, nella mail come allegato mi ritrovo sempre un file .tmp!

Ma move_uploaded_file() l'hai usato? Nel codice che hai postato non lo vedo...

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate