Repository 32bit  Forum
Repository 64bit  Wiki

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.

Re: Uploader php

Messaggioda Paoletta » mar giu 15, 2010 12:47

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
Paoletta
Staff
Staff
 
Messaggi: 3907
Iscritto il: dom apr 24, 2005 23:00
Località: Varese
Slackware: 13.1
Desktop: fluxbox

Re: Uploader php

Messaggioda conraid » mar giu 15, 2010 13:20

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
conraid
Staff
Staff
 
Messaggi: 12023
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: Uploader php

Messaggioda Paoletta » mar giu 15, 2010 17:07

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
Paoletta
Staff
Staff
 
Messaggi: 3907
Iscritto il: dom apr 24, 2005 23:00
Località: Varese
Slackware: 13.1
Desktop: fluxbox

Re: Uploader php

Messaggioda Ansa89 » mer giu 16, 2010 9:58

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
Ansa89
Iper Master
Iper Master
 
Messaggi: 2626
Iscritto il: mer ago 29, 2007 16:57
Località: Modena
Nome Cognome: Stefano Ansaloni
Slackware: 13.1
Kernel: 3.18.0-ck1
Desktop: XFCE 4.6.1

Re: Uploader php

Messaggioda conraid » mer giu 16, 2010 10:07

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
conraid
Staff
Staff
 
Messaggi: 12023
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: Uploader php

Messaggioda Ansa89 » mer giu 16, 2010 10:15

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
Ansa89
Iper Master
Iper Master
 
Messaggi: 2626
Iscritto il: mer ago 29, 2007 16:57
Località: Modena
Nome Cognome: Stefano Ansaloni
Slackware: 13.1
Kernel: 3.18.0-ck1
Desktop: XFCE 4.6.1

Re: Uploader php

Messaggioda conraid » mer giu 16, 2010 10:19

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
conraid
Staff
Staff
 
Messaggi: 12023
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: Uploader php

Messaggioda Ansa89 » mer giu 16, 2010 10:21

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: 2626
Iscritto il: mer ago 29, 2007 16:57
Località: Modena
Nome Cognome: Stefano Ansaloni
Slackware: 13.1
Kernel: 3.18.0-ck1
Desktop: XFCE 4.6.1

Re: Uploader php

Messaggioda Ansa89 » sab giu 19, 2010 16:39

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>';
?>
Avatar utente
Ansa89
Iper Master
Iper Master
 
Messaggi: 2626
Iscritto il: mer ago 29, 2007 16:57
Località: Modena
Nome Cognome: Stefano Ansaloni
Slackware: 13.1
Kernel: 3.18.0-ck1
Desktop: XFCE 4.6.1

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Yahoo [Bot] e 1 ospite