- Home
- Categorie
- Coding e Sistemistica
- PHP
- Upload di foto in pagina web
-
Upload di foto in pagina web
Salve, sto' disegnando un sito internet ed ho questo problema: Ho un form dove l'utente si iscrive, inserisce i suoi dati e le sue foto in un form e alla fine le invia. Tutto bene fino a quando inserisce i dati, il problema sorge quando deve inserire le foto; non so come fare uno script che permetta di fare l' upload delle foto e di mandarle alla mia mail insieme ai dati. Premetto che non sono esperto in PHP, mi limito a modificare i vari script che trovo in giro ...Sarei grato se qualcuno mi possa spiegare (o mandare uno script ) per inserire al mio form le foto. Grazie in anticipo.
-
Il form di invio deve contenere
[HTML]
<form method="post" action="send.php" enctype="multipart/form-data"><!-- Vari campi -->
Immagine <input class="camp" name="file_send" type="file" />
<input type="submit" value=" Invio " />
</form>[/HTML]
Mentre la pagina send.php
[PHP]
$Reply = upload($dir = "directory_file_ricevuti/", $tipo = FALSE, $dim = FALSE, $debug = FALSE);
$code_reply = "\r\n<p>$Reply</p>";
echo $code_reply;
[/PHP]
La funzione upload richiamata è questa:
[PHP]
/**- Funzione per effettuare l'upload
*/
function upload($dir = "directory_file_ricevuti/", $tipo = FALSE, $dim = FALSE, $debug = FALSE)
{
//Impostare la path assoluta del proprio sito
$source_dir = "/var/www/site/home/......etc";
if(!is_uploaded_file($_FILES['file_send']['tmp_name']))
{
$echo = "Nessun file selezionato da inviare al server";
#exit();
}
if(is_uploaded_file($_FILES['file_send']['tmp_name'])){
//Funzione di debug if($debug != FALSE){ print_r($_FILES); } //Controllo che il file non esista nella destinazione if (is_file($source_dir.$dir.$_FILES['file_send']['name'])){ $echo = "Esiste già un file con lo stesso nome!<br /> Rinominarlo e tentare nuovamente!"; (); } //Controllo il tipo di file se ne ho definito uno o più obbligatori if($tipo != FALSE) { if(is_array($tipo)) { if(!in_array($_FILES['file_send']['type'],$tipo)) { $echo = "Tipo file non consentito"; (); } } else { if($_FILES['file_send']['type'] != $tipo) { $echo = "Tipo file non consentito"; (); } } } //Controllo che le dimensioni non superino il massimo consentito if($dim != FALSE) { $dimz = $dim * 1024000; if($_FILES['file_send'] > $dimz) { $echo = "Il file che si sta cercando di inviare è troppo grande!<br /> la dimensione massime consentita è di " . $dim . " megabyte"; (); } } //Controllo che la directory di destinazione sia server writable if(!is_writable($source_dir.$dir)) { $echo = "Non si dispone dei permessi necessari!<br /> Contattare l'amministratore del sistema e far settare i permessi della directory <i>" . $dir . "</i> a 0777"; (); } //Passati tutti i controlli posso inviare il file al server! if(move_uploaded_file($_FILES['file_send']['tmp_name'], $source_dir.$dir.$_FILES['file_send']['name'])) { $echo = "Il file è stato inviato correttamente al server!"; }
}
return($echo);
}
[/PHP]
Tutto qui
- Funzione per effettuare l'upload
-
Grazie Linus, a vedere così sembra uno script ben fatto e completo, però quello che serve a me è uno script per mandare più files di foto come allegato, che arrivino alla mia e-mail e per quello che ho potuto vedere non sono ruscito a capire se lo script serve per mandare e-mail con allegati multipli.
Di seguito inserisco uno script che stò cercando di modificare, tutto funziona solo non so come aggiungere altri allegati allo stesso script (con questo ne manda solo uno...). Se qualcuno può aiutarmi sarei molto grato..:)<?php
// Recupero il valore dei campi del form
$destinatario = $_POST['destinatario'];
$mittente = $_POST['mittente'];
$oggetto = $_POST['oggetto'];
$messaggio = "
nombre: $nombre \n
apellido: $apellido \n
apodo: $apodo \n
edad: $edad \n
dia: $dia \n
mes: $mes \n
mittente: $mittente \n
profesion: $profesion \n
estado: $estado \n
hijos: $hijos \n
num: $num \n
mujer: $numhembra \n
varon: $numvaron \n
estatura: $estatura \n
peso: $peso \n
cabellos: $cabellos \n
ojos: $ojos \n
descripciones: $descripciones \n ";// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];// Creo 2 variabili che riempirò più avanti...
$headers = "From: " . $mittente;
$msg = "";// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...if (is_uploaded_file($allegato2))
{// Apro e leggo il file allegato
$file = fopen($allegato,'rb');
$data = fread($file, filesize($allegato));
fclose($file);// Adatto il file al formato MIME base64 usando base64_encode
$data = chunk_split(base64_encode($data));// Genero il "separatore"
// Serve per dividere, appunto, le varie parti del messaggio.
// Nel nostro caso separerà la parte testuale dall'allegato
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";// Aggiungo le intestazioni necessarie per l'allegato
$headers .= "\nMIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed;\n";
$headers .= " boundary="{$mime_boundary}"";// Definisco il tipo di messaggio (MIME/multi-part)
$msg .= "This is a multi-part message in MIME format.\n\n";// Metto il separatore
$msg .= "--{$mime_boundary}\n";// Questa è la parte "testuale" del messaggio
$msg .= "Content-Type: text/plain; charset="iso-8859-1"\n";
$msg .= "Content-Transfer-Encoding: 7bit\n\n";
$msg .= $messaggio . "\n\n";// Metto il separatore
$msg .= "--{$mime_boundary}\n";// Aggiungo l'allegato al messaggio
$msg .= "Content-Disposition: attachment;\n";
$msg .= " filename="{$allegato_name}"\n";
$msg .= "Content-Transfer-Encoding: base64\n\n";
$msg .= $data . "\n\n";// chiudo con il separatore
$msg .= "--{$mime_boundary}--\n";
}
else
{
$msg = $messaggio;
}// Invio la mail
if (mail($destinatario, $oggetto, $msg, $headers))
{
echo "<p>Mail inviata con successo!</p>";
}
else
{
echo "<p>Errore!</p>";
}
?>