Uploader php

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Re: Uploader php

Messaggio da Paoletta »

j0kers ha scritto:
4) C'è un limite alla dimensione dei file che puoi caricare. Guarda il file php.ini e cerca qualcosa come "post_max_size" o "upload_max_filesize"
50M
con il file php.ini di default il limite è settato a 2 mega...

Codice: Seleziona tutto

Maximum allowed size for uploaded files.
upload_max_filesize = 2M

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Uploader php

Messaggio da conraid »

Inoltre userei move_uploaded_file o al massimo rename, perché tenere una copia in /tmp? ti è necessaria?

al resto ti hanno risposto emanuele e paoletta. Se vuoi usare \n ed avere un comportamento simile sia a browser sia in output standard usa nl2br() quando vuoi mostrare su browser, ma nel tuo caso non so quanto ti serva, mi sembra tutto a browser

poi naturalmente se metti in produzione cerca di prevenire errori, controlla l'input, etc...

io ho provato il tuo codice, con le correzioni che ti ho detto e con l'aggiunta di qualche riga per debug e mi funziona, anche se non avrei fatto così

comunque questo è quello che ho testato e mi funziona

Codice: Seleziona tutto

<?php

$up_path = "upload";

echo '<html>
        <title>Upload file</title>
        <body>';

function num_upload() {
        echo '<form action="upload.php" method="post">
                How many images do you want to upload?
                <input type="text" name="num">
                <input type="submit" value="Submit">
                </form>';
}

function multi_upload($num) {
        echo '<form action="upload.php" enctype="multipart/form-data" method="post">
                <table border="0" width="400" cellspacing="0" cellpadding="0" align=center>';
        for ($i = 1; $i <= $num; $i++) {
                echo '<tr><td>'."Image ".$i.": ".'</td>
                        <td><input type="file" name="image[]"></td></tr>
                        <tr><td>'."Desc. ".'</td>                                                                             
                        <td><input type="text" name="desc[]"></td></tr>';                                                     
        }                                                                                                                     
        echo '<tr><td colspan=2 align=center>                                                                                 
                <input type=submit value="Add Image(s)"></td></tr>                                                            
                </table></form>';                                                                                             
}                                                                                                                             
                                                                                                                              
function upload($up_path) {
        $j = 1;
        while (list($key,$value) = each($_FILES['image']['name'])) {
                print "1<br>\n";
                //list($desc_k,$desc_v) = each($_REQUEST['desc']['name']);
                echo "2<br>\n";
                if (! empty($value)) {
                        echo $value."<br>\n";
                        $filename = $value;
                        $filename = str_replace(" ","_",$filename);
                        $filename = str_replace("'","",$filename);
                        echo $filename."<br>\n";
                        $path = $up_path."/".$filename;
                        if (file_exists($path)) {
                                echo "The file ".$filename." already exists.\n";
                                break;
                        }
                        echo $path."<br>\n";
                        $tempfile=$_FILES['image']['tmp_name'][$key];
  echo $tempfile."<br>\n";
                        if (file_exists($tempfile)) {
                                echo "The file ".$tempfile." exists.\n";
                                
                        } else {
                                echo "The file ".$tempfile." not exists.\n";
                                
                        }
                        if (copy($tempfile,$path))
                                echo "File ".$j." caricato<br>\n";
                        else {
                                echo "Errore nella copia";
                        }
                        if (chmod($path,0660))
                                echo "File ".$j." chmod'd<br>\n";
                        if (! empty($desc[$j])) {
                                $desc_file = fopen("$path/.pics_desc","a");
                                $imgdesc = $desc_v;
                                $imgdesc = str_replace("\n"," ",$imgdesc);
                                $write = $filename.";".$desc_v."\n";
                                fwrite($desc_file,$write);
                                fclose();
                        }
                        $j++;
                }
        }
}

num_upload();
if (! empty($_REQUEST['num'])) {
        echo'<br /><p>';
        multi_upload($_REQUEST['num']);
        echo '</p>';
}
if (! empty($_FILES['image'])) {
        $up_path = "upload";
        echo $_FILES['image']."<br>\n";
        echo '<br /><p>';
        upload($up_path);
        echo '</p>';
}
echo '</body></html>';

il file si chiama upload.php ed è nella directory /home/htdocs/prova ed ho creato una directory /home/htdocs/prova/upload con i permessi per apache

/home/htdocs è la mia docroot

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Re: Uploader php

Messaggio da Paoletta »

relativamente alla variabile globale $up_path, il tuo problema è che non la richiami correttamente all'interno della funzione; per far questo basta usare la direttiva global, in modo da informare php che ti riferisci alla variabile globale (e non ad una interna alla funzione).
Qui c'è il codice:

Codice: Seleziona tutto

<?php
$up_path="upload";
echo '<html>
        <title>Upload file</title>
        <body>';

function num_upload() {
        echo '<form action="upload.php" method="post">
                How many images do you want to upload?
                <input type="text" name="num">
                <input type="submit" value="Submit">
                </form>';
}

function multi_upload($num) {
        echo '<form action="upload.php" enctype="multipart/form-data" method="post">
                <table border="0" width="400" cellspacing="0" cellpadding="0" align=center>';
        for ($i = 1; $i <= $num; $i++) {
                echo '<tr><td>'."Image ".$i.": ".'</td>
                        <td><input type="file" name="image[]"></td></tr>
                        <tr><td>'."Desc. ".'</td>
                        <td><input type="text" name="desc[]"></td></tr>';
        }
        echo '<tr><td colspan=2 align=center>
                <input type=submit value="Add Image(s)"></td></tr>
                </table></form>';
}

function upload() {
        $j = 1;
        while (list($key,$value) = each($_FILES['image']['name'])) {
	        global $up_path;
                print "1 <br/>";
                //list($desc_k,$desc_v) = each($_REQUEST['desc']['name']);
                echo "2 <br/>";
                if (! empty($value)) {
                        echo $value."<br/>";
                        $filename = $value;
                        $filename = str_replace(" ","_",$filename);
                        $filename = str_replace("'","",$filename);
                        echo $filename."<br/>";
                        $path = $up_path."/".$filename;
                        if (file_exists($path)) {
                                echo "The file ".$filename." already exists.<br/>";
                                break;
                        }
                        echo $path."<br/>";
                        if (copy($_FILES['image']['tmp_name'][$key],$path))
                                echo "File ".$j." caricato<br/>";
                        else {
				$error=error_get_last();
                                echo "Errore nella copia".$error['message'];
                        }
                        if (chmod($path,0660))
                                echo "File ".$j." chmod'd<br/>";
                        if (! empty($desc[$j])) {
                                $desc_file = fopen("$path/.pics_desc","a");
                                $imgdesc = $desc_v;
                                $imgdesc = str_replace("<br/>"," ",$imgdesc);
                                $write = $filename.";".$desc_v."<br/>";
                                fwrite($desc_file,$write);
                                fclose();
                        }
                        $j++;
                }
        }
}

num_upload();
if (! empty($_REQUEST['num'])) {
        echo'<br /><p>';
        multi_upload($_REQUEST['num']);
        echo '</p>';
}
if (! empty($_FILES['image'])) {
        echo $_FILES['image']."<br/>";
        echo '<br /><p>';
        upload();
        echo '</p>';
}
echo '</body></html>';
?>
In questo modo risparmi anche l'utilizzo delle variabili di sessione (utili quando lavori con un insieme di script);

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: Uploader php

Messaggio da Ansa89 »

Ok, grazie per le 1000 risposte dettagliate.
Non so bene a chi/cosa rispondere, quindi mi limito a ringraziare tutti.
Adesso farò qualche prova e se avrò ancora dei dubbi posterò qui :) .

Grazie per la vostra disponibilità.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Uploader php

Messaggio da conraid »

Ansa89 ha scritto:Ok, grazie per le 1000 risposte dettagliate.
Non so bene a chi/cosa rispondere, quindi mi limito a ringraziare tutti.
Adesso farò qualche prova e se avrò ancora dei dubbi posterò qui :) .

Grazie per la vostra disponibilità.
comunque se vuoi un consiglio rivedi il tutto, nel manuale php c'è una parte apposita per l'upload dei file, con tanto di descrizione degli errori

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: Uploader php

Messaggio da Ansa89 »

conraid ha scritto:rivedi il tutto
Sì, quello è da considerare solo come "prova", giusto per capire come funziona.
Guarderò anche il manuale online di php.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Uploader php

Messaggio da conraid »

e questo solo per il php, anche l'html... ehm... sa di anni '90 usare le tabelle per quelle cose, poi con le impostazioni nei tag... brrrrrrrrr :-)

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: Uploader php

Messaggio da Ansa89 »

conraid ha scritto:l'html... ehm... sa di anni '90 usare le tabelle per quelle cose, poi con le impostazioni nei tag... brrrrrrrrr :-)
:lol: :lol:
Me l'hanno insegnato in terza superiore...ho detto tutto.

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: Uploader php

Messaggio da Ansa89 »

Vi posto il lavoro ultimato (nel senso che per me va bene così e non andrò oltre).
I tag sembrano arrivare direttamente dall'inizio anni '90 e me ne scuso (per chi non l'avesse ancora capito, io non so programmare in html/php).

Codice: Seleziona tutto

<?php
echo '<html>
        <title>Upload file</title>
        <body bgcolor="Teal">
        <center>';

function num_upload() {
        echo '<form action="upload.php" method="post">
                How many images do you want to upload? 
                <br /><input type="text" name="num">
                <input type="submit" value="Submit">
                </form>';
}

function multi_upload($num) {
        if ($num > 10)
                $num = 10;
        echo '<form action="upload.php" enctype="multipart/form-data" method="post">
                <table border="0" width="400" cellspacing="0" cellpadding="0" align=center>';
        for ($i = 1; $i <= $num; $i++) {
                echo '<tr><td>'."Image ".$i.": ".'</td>
                        <td><input type="file" name="image[]"></td></tr>
                        <tr><td>'."Desc. ".'</td>
                        <td><input type="text" name="desc[]"></td></tr>';
        }
        echo '<tr><td><br /></td></tr>
                <tr><td colspan=2 align=center>
                <input type=submit value="Add Image(s)"></td></tr>
                </table>
                <input type="hidden" name="num_up" value="'.$num.'">
                </form>';
}

function upload($up_path, $num_up) {
        $allowed_ext = array('.jpg','.jpeg','.gif','.png');
        $desc_path = "$up_path/.pics_desc";
        if (! file_exists($up_path)) {
                $mode = 0755;
                $recursive = true;
                if (! mkdir($up_path,$mode,$recursive))
                        echo "Error creating upload directory ".$up_path.'<br />';
        }
        if ($num_up > 10)
                $num_up = 10;
        for ($i = 0; $i < $num_up; $i++) {
                $filename = $_FILES['image']['name'][$i];
                if (! empty($filename)) {
                        $pos = strrpos($filename,".");
                        $ext = strtolower(substr($filename,$pos,(strlen($filename) - $pos)));
                        if (! in_array($ext,$allowed_ext)) {
                                echo "Error: file type not allowed (\"".$ext."\").".'<br /><br />';
                                echo "Allowed extensions: \"".implode("\", \"",$allowed_ext)."\".".'<br />';
                                continue;
                        }
                        $filename = str_replace(" ","_",$filename);
                        $filename = str_replace("'","",$filename);
                        $filename = str_replace("(","",$filename);
                        $filename = str_replace(")","",$filename);
                        $filename = str_replace("[","",$filename);
                        $filename = str_replace("]","",$filename);
                        $filename = str_replace("{","",$filename);
                        $filename = str_replace("}","",$filename);
                        $path = $up_path."/".$filename;
                        if (file_exists($path)) {
                                echo "The file ".$filename." already exists.".'<br />';
                                continue;
                        }
                        if (move_uploaded_file($_FILES['image']['tmp_name'][$i],$path))
                                echo "Image ".($i + 1)." loaded.".'<br />';
                        else {
                                echo "Upload error on image ".($i + 1).'.<br />';
                                continue;
                        }
                        if (! chmod($path,0660))
                                echo "Chmod error on image".($i + 1).'.<br />';
                        $desc_file = fopen("$desc_path","a");
                        $write = $filename.";";
                        if (! fwrite($desc_file,$write))
                                echo "Error writing ".$desc_path." for ".$filename.'.<br />';
                        if (! empty($_REQUEST['desc'][$i])) {
                                $imgdesc = $_REQUEST['desc'][$i];
                                $imgdesc = str_replace("\n"," ",$imgdesc);
                                $write = $imgdesc."\n";
                                if (! fwrite($desc_file,$write))
                                        echo "Error writing description for ".$filename.'.<br />';
                        }
                        else
                                if (! fwrite($desc_file,"\n"))
                                        echo "Error writing ".$desc_path." for ".$filename.'.<br />';
                        if (! fclose($desc_file))
                                echo "Error closing ".$desc_path.'.<br />';
                }
        }
}

num_upload();
if (! empty($_REQUEST['num'])) {
        echo'<br /><p>';
        multi_upload($_REQUEST['num']);
        echo '</p>';
}
if (! empty($_FILES['image']) && ! empty($_REQUEST['num_up'])) {
        $up_path = 'upload';
        echo '<br /><p>';
        upload($up_path,$_REQUEST['num_up']);
        echo '</p>';
}
echo '</center></body></html>';
?>

Rispondi