 | |
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 |
[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("$file","$file_name");
include ("class.phpmailer.php");
//creazione istanza phpmailer
$mail = new phpmailer();
//seleziona il protocollo SMTP come modalità di spedizione
$mail->IsSMTP();
//nome dominio
$mail->Host = "smtp.nuovacarrozzeriastella.it";
//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 = "preventivi@nuovacarrozzeriastella.it";
//$mail->FromName = "preventivi stella";
//destinatario
//$mail->AddAddress($_REQUEST['TO'], $_REQUEST['ToName']);
$mail->AddAddress('preventivi@nuovacarrozzeriastella.it');
//aggiungo gli allegati
//@copy("$file","foto/$file_name");
//$mail->AddAttachment('68.png');
$mail->AddAttachment($file);
//echo $file1."<br>";
//$mail->AddAttachment($file2);
//echo $file2."<br>";
//$mail->AddAttachment($file3);
//echo $file3."<br>";
//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 "<h2><p>Messaggio inviato con successo!</p></h2>";
} else {
echo "<p>Errore: ".$mail->ErrorInfo."</p>";
}
}
?>
<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... |
|
|
|
|