Visualizzazione risultati 1 fino 7 di 7

Discussione: Upload multiplo immagini

  1. #1
    Guest

    Arrow Upload multiplo immagini

    Salve,

    sto cercando di scrivere uno script per l'upload multiplo di immagini da un form che mi aiuti anche a ridimensionare i file qualora ce ne sia bisogno.

    Ho testato lo script con file singoli, quindi prima di inserire il codice per il caricamento multiplo e tutto funziona alla perfezione.

    Il problema è sorto appunto quando ho integrato il codice per il caricamento multiplo, non mi sembrava nienete di complicato, un semplice ciclo foreach eppure non mi carica più alcun file..

    Potreste controllare se ho sbagliato o dimenticato qualcosa? Grazie in anticipo.

    Il form, semplicissimo per il momento, giusto per testarlo

    Codice HTML:
    	<form method="post" enctype="multipart/form-data" action="galleria.php" id="form">
    	<h1>Upload immagini PHP</h1>
    	<hr>
    
    	<label for="file">Seleziona l'immagine da caricare: </label>
    	<input type="file" name="file[]" multiple/>
    
    	<input type="submit" name="carica" value="Carica" />
    </form>
    E qui il codice php che dovrebbe effettuare l'upload

    Codice PHP:
    <?php

    // Caricamento foto…
    $nomePostFoto = "file"; // Nome del campo presente nel form di caricamento
    $pathImg = "../eventi/"; // Path cartella imamgini
    $id = $_FILES[$nomePostFoto]["name"]; // Nome immagine (eventualmente da generare in maniera pseudocasuale)
    $wi = 250; // Max larghezza possibile
    $he = 150; // Max altezza immagine
    $allowedExtensions = array("jpg","jpeg","gif","png"); // Estensioni ammesse

    if(!empty($_FILES[$nomePostFoto])) {
    foreach (
    $_FILES[$nomePostFoto]["name"] as $indice => $id) {
    if (
    strlen($nomeFoto)>0)
    {
    // Caricamento permesso ?
    $caricaFoto = "NO";
    $nomeFotoUno = basename($_FILES[$nomePostFoto]["name"][$indice]);
    if (
    strlen($nomeFotoUno) > 0)
    {
    $parts = explode(".",$_FILES[$nomePostFoto]["name"][$indice]);
    $ext = strtolower(end($parts));
    if (!
    in_array($ext,$allowedExtensions))
    echo
    "<br><br><br><div align=’center’>".$_FILES[$nomePostFoto]["name"][$indice]." ha una estensione non consentita (PNG, JPG, JPEG, GIF) e non e’ stato caricato!</div><br><br/>";
    else
    $caricaFoto = "SI";
    if (
    $caricaFoto = "SI")
    {
    // Elimino il file precedente prima di caricare il nuovo onde evitare doppioni (Es. caricata precedentemente .jpg e carico .png)…
    foreach($allowedExtensions as $extTmp)
    {
    $nomeJPGTmp = $pathImg.$id.".".$extTmp;
    if (
    file_exists($nomeJPGTmp))
    unlink($nomeJPGTmp);
    }
    $nomeFile = $id.".".$ext;
    $uploadfile = $pathImg.$nomeFile;
    if (
    move_uploaded_file($_FILES[$nomePostFoto]["tmp_name"][$indice],$uploadfile))
    {
    $size = getimagesize($uploadfile);
    if (
    $size[0]>$wi)
    {
    // codice per il ridimensionamento
    if ( ($size[0] > $wi) OR ($size[1] > $he) )
    {
    $rapporto = $wi / $he;
    $proporzione = $size[0] / $size[1];
    if (
    $rapporto > $proporzione)
    {
    // Fisso la larghezza e ricalcolo l’altezza…
    $he=$size[1]*($wi/$size[0]);
    }
    else
    {
    // Fisso l’altezza e ricalcolo la larghezza…
    $wi=$size[0]*($he/$size[1]);
    }
    $image = imagecreatefromjpeg($uploadfile);
    $thumb = imagecreatetruecolor($wi,$he);
    imagecopyresampled($thumb,$image,0,0,0,0,$wi,$he,$size[0],$size[1]);
    // fisso una proporzione della qualità dell'immagine da caricare (valore predefinito e reale 100)
    imagejpeg($thumb,$uploadfile, 80);
    }
    // distruggiamo il file originale che non ci serve più una volta caricato il file col resize
    imagedestroy($image);
    imagedestroy($thumb);
    }
    }
    }
    }
    }
    }
    }

    ?>

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    La variabile nomeFoto non l'hai mai inizializzata, a cosa ti serve quel controllo?

  3. #3
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    file[]
    Codice PHP:
    $_FILES['file']['tmp_name'][0];
    é successivi 1,2,3,4,5,6,7 ecc. non aggiungo altro trai le tue conclusioni. http://www.manuelmarangoni.it/sir-bi...mporaneamente/
    Ultima modifica di darbula : 08-10-2015 alle ore 20.21.15

  4. #4
    Guest

    Predefinito

    Ciao karl94
    hai ragione voleva essere $nomePostFoto, errore di battitura. Quel controllo mi serve per verificare innanzitutto che si stia cercando di caricare un file prima di fare i dovuti controlli. Allo script mancano ancora le risposte negative, ma le sto inserendo adesso.
    Comunque forse hai ragione sarebbe più corretta una formula come

    Codice PHP:
    if ($_FILES[$nomePostFoto]['name'] != "")
    oppure
    Codice PHP:
    if (isset($_FILES[$nomePostFoto]['name']))
    Grazie della dritta darbula, l'aggiunta di quella variabile in effetti ha risolto egregiamente il mio problema, adesso il foreach mi cicla a dovere l'array.

    Ora però ho un altro piccolo problema, è vero che mi carica tutti i file che seleziono, ma nella directory e nella galleria del sito mi fa visualizzare correttamente solo i file jpeg. Ho provato con diverse estensioni, anche per vedere se funzionava il controllo sulle stesse, ma mi carica anche i bmp sulla directory (anche se il messaggio di errore esce lo stesso). La cosa strana è però che solo i file jpeg sono visualizzabili, tutti gli altri appaiono neri.

    Ora mi chiedo, perché fa così?

    EDIT

    Ho risolto il problema per cui mi caricava tutti i file, anche quelli con estensione non gradita, banalmente avevo dimenticato di racchiudere le variabili di caricamento all'interno del controllo d'estensione. Così sì mi faceva il controllo, ma ovviamente li caricava lo stesso perché due script separati.

    Ora però mi rimane il problema che a parte i file jpeg tutti gli altri li vedo sul server come quadrati neri. C'è qualcosa che mi sfugge nelle impostazioni di Altervista sul caricamento delle immagini? Perché non trovo senso a questa distinzione.

    Spero mi possiate chiarire questo dubbio
    Ultima modifica di passitobailante : 09-10-2015 alle ore 10.46.00

  5. #5
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    fai uno screen di cosa significa quei quadratini neri, perchè cosi non capisco a cosa ti riferisci. ps. anche corredato di codice php o html in modo da poter riscontrare il tuo stesso problema ed eventualmente risolverlo.
    Ultima modifica di darbula : 10-10-2015 alle ore 19.37.44

  6. #6
    Guest

    Predefinito

    Certo, grazie per il supporto.

    Questo è lo script al momento:

    Codice PHP:
    <?php

    // Caricamento foto…
    $nomePostFoto = "file"; // Nome del campo presente nel form di caricamento
    $pathImg = "../eventi/"; // Path cartella imamgini
    $id = $_FILES[$nomePostFoto]["name"]; // Nome immagine (eventualmente da generare in maniera pseudocasuale)
    $wi = 250; // Max larghezza possibile
    $he = 150; // Max altezza immagine
    $allowedExtensions = array("jpg","jpeg","gif","png"); // Estensioni ammesse

    if(!empty($_FILES[$nomePostFoto])) {
    if (isset(
    $_FILES[$nomePostFoto]['name']))
    {
    $count = 0;
    // con foreach ci assicuriamo di effettuare le prossime operazioni per ogni file caricato
    foreach ($_FILES[$nomePostFoto]["name"] as $indice)
    {
    // Caricamento permesso ?
    $origin = $_FILES[$nomePostFoto]["tmp_name"][$count];
    $caricaFoto = "NO";
    $nomeFotoUno = basename($indice);
    if (
    strlen($nomeFotoUno) > 0)
    {
    // controlliamo l'estensione, se non è tra quelle impostate nell'array allora non carichiamo l'immagine
    $parts = explode(".",$_FILES[$nomePostFoto]["name"][$count]);
    $ext = strtolower(end($parts));
    if (!
    in_array($ext,$allowedExtensions))
    echo
    "<br><br><br><div align=’center’>".$_FILES[$nomePostFoto]["name"][$count]." ha una estensione non consentita (PNG, JPG, JPEG, GIF) e non e’ stato caricato!</div><br><br/>";
    // se l'estenzione è presente allora procediamo
    else
    {
    $caricaFoto = "SI";
    if (
    $caricaFoto = "SI")
    {
    $nomeFile = $nomeFotoUno;
    $uploadfile = $pathImg.$nomeFile;
    if (
    move_uploaded_file($_FILES[$nomePostFoto]["tmp_name"][$count],$uploadfile))
    {
    // se le dimensioni dell'immagine sono superiori a quelle impostate allora ridimensioniamo l'immagine
    $size = getimagesize($uploadfile);
    if (
    $size[0]>$wi)
    {
    // codice per il ridimensionamento
    if ( ($size[0] > $wi) OR ($size[1] > $he) )
    {
    $rapporto = $wi / $he;
    $proporzione = $size[0] / $size[1];
    if (
    $rapporto > $proporzione)
    {
    // Fisso la larghezza e ricalcolo l’altezza…
    $he=$size[1]*($wi/$size[0]);
    }
    else
    {
    // Fisso l’altezza e ricalcolo la larghezza…
    $wi=$size[0]*($he/$size[1]);
    }
    $image = imagecreatefromjpeg($uploadfile);
    $thumb = imagecreatetruecolor($wi,$he);
    imagecopyresampled($thumb,$image,0,0,0,0,$wi,$he,$size[0],$size[1]);
    // fisso una proporzione della qualità dell'immagine da caricare (valore predefinito e reale 100)
    imagejpeg($thumb,$uploadfile, 80);
    }
    // distruggiamo il file originale che non ci serve più una volta caricato il file col resize
    imagedestroy($image);
    imagedestroy($thumb);
    }
    }
    }
    }
    }
    // aumentando $count passiamo al file successivo nel foreach
    $count++;
    }
    }
    }

    ?>
    Il form è lo stesso di prima, non penso serva riportarlo.

    Questa è la cartella dove vengono salvate le immagini in questione, come puoi notare sono diversi tipi, tutte caricate con lo script di sopra:



    E questo è ciò che vedo a video nella mia pagina. Come puoi notare si vede solo la foto 1, le altre sono tutti quadrati neri. Anche se le apro singolarmente dal folder dove sono salvate vedo la stessa cosa.



    Non posso costringere chi deve caricare le foto a scegliere solo jpeg, potrebbero avere png a cui non sono in grado di modificare l'estensione, quindi ho risolvo questo problema o trovo un sistema per trasformare tutte le immagini in jpeg, sempre se esiste.

    Però preferirei capire perché non funge, mi lascerebbe l'amaro in bocca non saperne il motivo
    Ultima modifica di passitobailante : 11-10-2015 alle ore 11.16.47

  7. #7
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Ciao è passato molto tempo ho avuto da fare, non ho verificato il codice ma noto che crei solo file jpeg
    Codice PHP:
    $image = imagecreatefromjpeg($uploadfile);
    . Non hai preso in considerazione che per gif o png la funzione si chiama diversamente. ps. deve creare anche un header con il giusto mime Type. Fammi sapere!!

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •