[Risolto] [Supporto] [PHP]Upload multiplo

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
Sorriso.
Prode Principiante
Messaggi: 29
Iscrizione: martedì 30 agosto 2011, 20:56

[Risolto] [Supporto] [PHP]Upload multiplo

Messaggio da Sorriso. »

Ciao ragazzi,
Io volevo sviluppare uno script che mi permettesse di uppare, simultaneamente, più immagini.
Il codice che ho scritto è questo:

Codice: Seleziona tutto

<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="file[]" multiple="" />
<input type="submit" name="Uppa!" value="go" />
</form>
<?php

$acceptType = array( //tipi di file accettati, in questo caso solo immagini
     'png' => 'image/png',
     'jpe' => 'image/jpeg',
     'jpeg' => 'image/jpeg',
     'jpg' => 'image/jpeg',
     'gif' => 'image/gif',
     'bmp' => 'image/bmp',
     'ico' => 'image/vnd.microsoft.icon',
);
$cartella = "/album/"; //cartella dove vengono caricati i file nel server

$numero = count($_FILES['files']['tmp_name']);

echo ' ok <br> ';

function singleupload ($i, $cartella, $maxSize, $acceptType){

echo ' ok <br>';

if(@$_FILES['file']['tmp_name'][$i] != "") {
    $destinazione = $cartella.basename( $_FILES['file']['tmp_name'][$i]);
        if(in_array($_FILES['file']['type'][$i], $acceptType)) {
            if(@move_uploaded_file($_FILES['file']['tmp_name'][$i], $destinazione))
                return "File caricato con successo!";
            else
                return "Errore nell'upload del file";
        }else
            return "Tipo di file non accettato!";
    elseif(isset($_POST['go']))
    return "Nessun file inserito!";
}

for($i=0;$i = $numero;$i++) {
    echo "Risultato file ".($i+1).": ".singleupload($i, $cartella, $maxSize, $acceptType)."<br/>";

echo ' ok <br>';

}

?>
Lo script non da errori. Solo che non fa quello che dovrebbe fare.
AIUTATEMI
Ultima modifica di Sorriso. il venerdì 9 settembre 2011, 2:59, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Zoff »

cosa vorresti che facesse?
come si comporta?
hai attivato la visualizzazione degli errori?
lo provi in locale o online?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Sorriso.
Prode Principiante
Messaggi: 29
Iscrizione: martedì 30 agosto 2011, 20:56

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Sorriso. »

Zoff ha scritto: cosa vorresti che facesse?
come si comporta?
hai attivato la visualizzazione degli errori?
lo provi in locale o online?
Allora:
Voglio che uppi simultaneamente più immagini nella directory stabilita.
Per vedere come si comporta vai su questo link:

Codice: Seleziona tutto

http://roma47.helloweb.us/upload.php
Come potrai osservare lo script proprio non parte. Non parte il ciclo for. Il perché non l'ho capito.
Non ho attivato la visualizzazione degli errori. Lo faccio subito ;).
Lo provo online

Mi correggo ecco l'errore che mi da:
Parse error: syntax error, unexpected T_ELSEIF in /var/www/roma47/public_html/upload.php on line 36

Ora vedo se lo riesco a correggere da solo.
Ultima modifica di Sorriso. il mercoledì 7 settembre 2011, 1:40, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Zoff »

Io non ricevo quell'errore.

Puoi postare il codice che stai usando ora?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Sorriso.
Prode Principiante
Messaggi: 29
Iscrizione: martedì 30 agosto 2011, 20:56

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Sorriso. »

Allora ieri mi ci sono messo di punta e sono riuscito a correggere tutti gli errori.
Il codice che utilizzo ora è questo:

Codice: Seleziona tutto

<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="file[]" multiple="" />
<input type="submit" name="Uppa!" value="go" />
</form>
<?php
error_reporting(E_ALL);

$acceptType = array( //tipi di file accettati, in questo caso solo immagini
     'png' => 'image/png',
     'jpe' => 'image/jpeg',
     'jpeg' => 'image/jpeg',
     'jpg' => 'image/jpeg',
     'gif' => 'image/gif',
     'bmp' => 'image/bmp',
     'ico' => 'image/vnd.microsoft.icon',
);
$maxSize = 50000000000;
$cartella = "/album/"; //cartella dove vengono caricati i file nel server

if(isset($_FILES['file']['name'])) {

$numero = count($_FILES['file']['name']);


for($i=0;$i< $numero;$i++) {
    echo "Risultato file ".($i+1).": ".singleUpload($i, $cartella, $maxSize, $acceptType)."<br/>";
}

}

function singleUpload($i, $cartella, $maxSize, $acceptType) {

if(@$_FILES['file']['name'][$i] != "") {
    $destinazione = $cartella.basename( $_FILES['file']['name'][$i]);
    if($_FILES['file']['size'][$i] <= $maxSize*1024) {
        if(in_array($_FILES['file']['type'][$i], $acceptType)) {
            if(move_uploaded_file($_FILES['file']['name'][$i], $destinazione))
                return "File caricato con successo!";
            else
                return "Errore nell'upload del file";
        }else
            return "Tipo di file non accettato!";
    }else
        return "Dimensione del file troppo grande, massima dimensione accettata: ".$maxSize." kilobyte";
}elseif(isset($_POST['go']))
    return "Nessun file inserito!";

}
?>
Allora. Il codice come dicevo non restituisce errori. Però, quando provo a fare l'upload di qualsiasi immagine lo script mi restituisce sempre questa frase:

Codice: Seleziona tutto

Risultato file 1: Errore nell'upload del file
Ho provato a cambiare i permessi, li ho messi ( sia della cartella di destinazione che del file stesso ) a 777. Ma continua a darmi errore.

Codice: Seleziona tutto

http://roma47.helloweb.us/upload.php
Per capire bene, c'è il link. Perché così in astratto, mi pare di non essermi spiegato molto bene :(.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Zoff »

Non è che la cartella dovrebbe essere ./album/ col punto davanti?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Sorriso.
Prode Principiante
Messaggi: 29
Iscrizione: martedì 30 agosto 2011, 20:56

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Sorriso. »

Provo subito e ti dico.
Avatar utente
Sorriso.
Prode Principiante
Messaggi: 29
Iscrizione: martedì 30 agosto 2011, 20:56

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Sorriso. »

Sorriso. ha scritto: Provo subito e ti dico.
No niente... Continua a darmi lo stesso "errore". Però secondo me, questo errore deriva dall'ultimo passaggio. Perché vedi, se manca la directory o è sbagliata c'è un if che controlla. Se il file è troppo grande c'è un if che controlla. Insomma, se ci fosse un problema di file, me lo dice.
Se dai un occhiata al codice, l'errore che viene fuori è dell'ultimo controllo che ho fatto fare... E come vedi, l'errore sta nel fatto che non riesce a uppare l'immagine.
Poi magari mi sbaglio. Ma penso che ci sia un errore a livello di codice.
Avatar utente
garak
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1647
Iscrizione: lunedì 13 giugno 2005, 13:37
Desktop: Gnome
Distribuzione: Ubuntu 24.04
Sesso: Maschile
Località: Roma
Contatti:

Re: [Supporto] [PHP]Upload multiplo

Messaggio da garak »

Io nel tuo codice non vedo nessun controllo sulla cartella di destinazione.
Avatar utente
Sorriso.
Prode Principiante
Messaggi: 29
Iscrizione: martedì 30 agosto 2011, 20:56

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Sorriso. »

garak ha scritto: Io nel tuo codice non vedo nessun controllo sulla cartella di destinazione.
Allora, :). Ho corretto tutti gli errori. E adesso sto modificando lo script per far si che abbia più funzionalità.

Codice: Seleziona tutto

<html>
<head>
<title>Uploader Multiplo</title>
</head>
<body>
<!-- form uploader -->
<form action="<?php print htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST" enctype="multipart/form-data">
Inserisci il nome dell'album: <br /><input type="text" name="name_album" value="name_album" /><br />
Inserisci l'autore: <br /><input type="text" name="name_author" value="name_author" /><br />
Inserisci il titolo dell'album: <br /><input type="text" name="title_album" value="title_album" /><br />
Scegli una o piu' immagini: <br><input type="file" name="file[]" multiple="" />
<input type="submit" name="Uppa!" value="go" />
</form>
<?php

$name_album = "./album/".$_POST['name_album']."/";
echo $name_album;
mkdir("$name_album",10770);
chmod("$name_album",0777);

function singleUpload($i, $name_album, $maxSize, $acceptType) {

    if($_FILES['file']['name'][$i] != "") {
    
        $destinazione = $name_album.basename( $_FILES['file']['name'][$i]);
        echo $destinazione;
        if($_FILES['file']['size'][$i] <= $maxSize*1024) {
        
            if(in_array($_FILES['file']['type'][$i], $acceptType)) {
            
                if(move_uploaded_file($_FILES['file']['tmp_name'][$i], $destinazione))
                    return "File caricato con successo!";
                else
                    return "Errore nell'upload del file";
            }else
                return "Tipo di file non accettato!";
            }else
                return "Dimensione del file troppo grande, massima dimensione accettata: ".$maxSize." kilobyte";
            }else
                if(isset($_REQUEST['go']))
                    return "Nessun file inserito!";

}

$acceptType = array( //tipi di file accettati, in questo caso solo immagini
     'png' => 'image/png',
     'jpe' => 'image/jpeg',
     'jpeg' => 'image/jpeg',
     'jpg' => 'image/jpeg',
     'gif' => 'image/gif',
     'bmp' => 'image/bmp',
     'ico' => 'image/vnd.microsoft.icon',
);

$maxSize = 50000000000000000000000; //Grandezza limite file

if($name_album!=""){

if(!file_exists($name_album))
    die("[ERROR] Cartella di destinazione INESISTENTE!");

if(!is_writable($name_album))
    die("[ERROR] Cartella di destinazione NON scrivibile!");

if(isset($_FILES['file']['name'])) {

    $numero = count($_FILES['file']['name']);

    for($i = 0;$i < $numero; $i++)
        print "\nRisultato file ".($i+1).": ".singleUpload($i, $name_album, $maxSize, $acceptType)."<br />";

}
}
?>
</body>
</html>
Funziona perfettamente. Però, ho un piccolo problema idiota. Non riesco a prendere il nome del singolo file. Mi sapete dire come posso fare?
Avatar utente
erPicci
Prode Principiante
Messaggi: 156
Iscrizione: martedì 26 aprile 2011, 12:07

Re: [Supporto] [PHP]Upload multiplo

Messaggio da erPicci »

Dipende... dove/come vuoi usare il nome del singolo file? L'idea più semplicistica che mi viene in mente è di passare alla funzione singleUpload una stringa vuota in cui la funzione andrà a salvare il nome del file (in caso di upload riuscito) oppure 0, o -1, o NULL o FALSE, o quello che sarà (in caso di upload fallito). Naturalmente è solo un'idea di base, poi dipende da cosa ti serve.

P.S. Forse lo sapevi già, ma per sicurezza vale la pena spenderci due parole:
$maxSize = 50000000000;
La dimensione massima di un file in upload dipende da uno dei file di configurazione del server (php.ini, ma correggetemi se sbaglio), quindi, prima di inserire questa limitazione, hai controllato/impostato la dimensione massima per l'upload nel php.ini? Di default mi sembra sia 2MB, quindi la condizione $maxSize=50000000000; sarebbe ridondante. Ha senso usare questa cosa se nelle impostazioni del server hai impostato un limite superiore (il che mi sembra improbabile perché 50 G sono tanti :P).
Avatar utente
Sorriso.
Prode Principiante
Messaggi: 29
Iscrizione: martedì 30 agosto 2011, 20:56

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Sorriso. »

erPicci ha scritto: Dipende... dove/come vuoi usare il nome del singolo file? L'idea più semplicistica che mi viene in mente è di passare alla funzione singleUpload una stringa vuota in cui la funzione andrà a salvare il nome del file (in caso di upload riuscito) oppure 0, o -1, o NULL o FALSE, o quello che sarà (in caso di upload fallito). Naturalmente è solo un'idea di base, poi dipende da cosa ti serve.

P.S. Forse lo sapevi già, ma per sicurezza vale la pena spenderci due parole:
$maxSize = 50000000000;
La dimensione massima di un file in upload dipende da uno dei file di configurazione del server (php.ini, ma correggetemi se sbaglio), quindi, prima di inserire questa limitazione, hai controllato/impostato la dimensione massima per l'upload nel php.ini? Di default mi sembra sia 2MB, quindi la condizione $maxSize=50000000000; sarebbe ridondante. Ha senso usare questa cosa se nelle impostazioni del server hai impostato un limite superiore (il che mi sembra improbabile perché 50 G sono tanti :P).
Si si tranquillo. Ho sistemato. Comunque, la sapevo già questa cosa del php.ini ;) ma grazie lo stesso :P.
Avatar utente
Sorriso.
Prode Principiante
Messaggi: 29
Iscrizione: martedì 30 agosto 2011, 20:56

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Sorriso. »

Ho un nuovo problema ( penso che non finiranno mai ). Questo è lo script:

Codice: Seleziona tutto

<html>
<head>
<title>Uploader Multiplo</title>
</head>
<body>
<!-- form uploader -->
<form action="<?php print htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST" enctype="multipart/form-data">
Inserisci il nome dell'album: <br /><input type="text" name="directory" value="" /><br />
Inserisci l'autore: <br /><input type="text" name="album_autore" value="autore dell'album" /><br />
Inserisci il titolo dell'album: <br /><input type="text" name="album_titolo" value="Reinserire il nome dell'album." /><br />
Scegli una o piu' immagini: <br><input type="file" name="file[]" multiple="" />
<input type="submit" name="Uppa!" value="go" />
</form>
<?php
 
error_reporting(E_ALL);
 
include "config.php";
 
 
if(isset($_POST['directory'])){
     $directory = "./album/".$_POST['directory']."/";
     echo $directory."<br />";
     if(isset($_POST['album_titolo'])){
          $album_titolo = $_POST['album_titolo'];
          echo $album_titolo."<br />";
          if(isset($_POST['album_autore'])){
               $album_autore = $_POST['album_autore'];
               echo $album_autore."<br />";
               if($album_titolo!="" OR $album_autore!=""){
                    echo "Ok. <br />";
 
                     function singleUpload($i, $directory, $maxSize, $acceptType) {
 
                           echo "OK. <br />";
 
                           if($_FILES['file']['name'][$i] != "") {
                                echo "OK. <br />";
   
                                $destinazione = $directory.basename( $_FILES['file']['name'][$i]);
                                $o = $_FILES['file']['name'][$i];
                                if($_FILES['file']['size'][$i] <= $maxSize*1024) {
       
                                    echo "Ok. <br />";
       
                                    if(in_array($_FILES['file']['type'][$i], $acceptType)) {
                                        echo "CIAOCIAOCIAOCIAO";
                                        $name_album = "http://".$_SERVER['SERVER_NAME']."/".$album_titolo."/";
                                        $url = $name_album.$o;
                                        $sql = "INSERT INTO album (album_autore, album_titolo) VALUES ('$album_autore', '$album_titolo')";
 
                                        // se l'inserimento ha avuto successo inviamo una notifica
                                        if (@mysql_query($sql) or die (mysql_error())){
                                             echo "Immagine/i inserita/e con successo";
                                        }
           
                                        if(move_uploaded_file($_FILES['file']['tmp_name'][$i], $destinazione)){
                                             $name_album = "http://".$_SERVER['SERVER_NAME']."/album/".$_POST['directory']."/";
                                             return "File caricato con successo!";}
                                        else
                                             return "Errore nell'upload del file";
                                   }else
                                         return "Tipo di file non accettato!";
                               }else
                                     return "Dimensione del file troppo grande, massima dimensione accettata: ".$maxSize." kilobyte";
                           }else
                        if(isset($_REQUEST['go']))
                            return "Nessun file inserito!";
 
                }
            }
        }
    }
}
 
$acceptType = array( //tipi di file accettati, in questo caso solo immagini
     'png' => 'image/png',
     'jpe' => 'image/jpeg',
     'jpeg' => 'image/jpeg',
     'jpg' => 'image/jpeg',
     'gif' => 'image/gif',
     'bmp' => 'image/bmp',
     'ico' => 'image/vnd.microsoft.icon',
);
 
$maxSize = 50000000000000000000000; //Grandezza limite file
 
if($_POST){
     mkdir("$directory",10770);
     chmod("$directory",0777);
 
     if(!is_writable($directory))
          die("[ERROR] Cartella di destinazione NON scrivibile!");
 
     if(isset($_FILES['file']['name'])) {
 
          $numero = count($_FILES['file']['name']);
 
    for($i = 0;$i < $numero; $i++)
          print "\nRisultato file ".($i+1).": ".singleUpload($i, $directory, $maxSize, $acceptType)."<br />";
 
     }    
}
?>
</body>
</html>
Le notice che mi riporta sono:

Codice: Seleziona tutto

Notice: Undefined variable: album_titolo in /membri/ifree/www/upload.php on line 48

Notice: Undefined variable: album_autore in /membri/ifree/www/upload.php on line 50

Notice: Undefined variable: album_titolo in /membri/ifree/www/upload.php on line 50
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Supporto] [PHP]Upload multiplo

Messaggio da Zoff »

Perché hai creato una funzione in mezzo al codice...

Le funzioni non "vedono" le variaili al di fuori di esse a meno che non siano trattate come variabili globali.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti