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
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

Uploader php

Messaggio da Ansa89 »

Sto cercando di scrivere un uploader php con un po' di difficoltà.

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\n";
                //list($desc_k,$desc_v) = each($_REQUEST['desc']['name']);
                echo "2\n";
                if (! empty($value)) {
                        echo $value."\n";
                        $filename = $value;
                        $filename = str_replace(" ","_",$filename);
                        $filename = str_replace("'","",$filename);
                        echo $filename."\n";
                        $path = $up_path."/".$filename;
                        if (file_exists($path)) {
                                echo "The file ".$filename." already exists.\n";
                                break;
                        }
                        echo $path."\n";
                        if (copy($_FILES['image']['tmp_name'][$key],$path))
                                echo "File ".$j." caricato\n";
                        else {
                                echo "Errore nella copia";
                        }
                        if (chmod($path,0660))
                                echo "File ".$j." chmod'd\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']."\n";
        echo '<br /><p>';
        upload($up_path);
        echo '</p>';
}
echo '</body></html>';
?>
1) Perché quando uso "\n" con echo, non va a capo?
2) Per ché dentro la funzione "upload()" non posso usare la variabile "$up_path" che ho dichiarato inizialmente?
3) Perché non funziona, dicendomi "PHP Warning: copy() [<a href='function.copy'>function.copy</a>]: Filename cannot be empty in /var/www/htdocs/upload.php on line 49, referer: http://192.168.7.4/upload.php" (preso dal log di apache)? In pratica è come se nella "copy()" la variabile "$path" (che uso come path di destinazione, comprensivo del nome file) fosse vuota; peccato che la faccio stampare la riga prima e sono sicuro che ha il valore giusto :roll: .

Avatar utente
j0kers
Linux 2.x
Linux 2.x
Messaggi: 418
Iscritto il: dom 22 lug 2007, 1:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggio da j0kers »

Scusa dove non ti funziona lo "\n" qui:

Codice: Seleziona tutto

                print "1\n";
                //list($desc_k,$desc_v) = each($_REQUEST['desc']['name']);
                echo "2\n";
o qui

Codice: Seleziona tutto

 echo $filename."\n";
Per la seconda prova a modificare in questo modo:

Codice: Seleziona tutto

 echo $filename , "\n";
Per quanto riguarda la variabile prova in questo modo:

Codice: Seleziona tutto

$up_path = upload;
Senza apici, per il resto attendiamo pareri di esperti 8)
Ultima modifica di j0kers il mar 15 giu 2010, 11:48, modificato 1 volta in totale.

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 »

@jokers, non sono esperto, ma... cancella il post è meglio ;-)
- o usi il punto o la virgola per unire le stringhe, non entrambi
- se non metti tra apici o virgolette una stringhe per il sistema è altro (una costante in questo caso) e darà errore o un warning dicendo che prenderà il valore upload come costante (ma non è quello che vuole ansa)

@ansa

1) gli a capo sono <br> in html
2) come non puoi usarla? in che senso? se intendi usarla senza metterla tra le variabili passate alla funzione, allora "globalizzala"
3) esiste la directory upload dentro il path in cui gira lo 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 »

L'errore del "\n" me lo dà ovunque indistintamente.
Se provo a cambiare in

Codice: Seleziona tutto

echo $filename. , "\n";
Mi dà errore sulla virgola e si blocca.

Se uso "$up_path = upload;" senza apici o virgolette, non me lo prende e quando vado a stampare il valore di "$path" ottengo "/image.jpg" invece di "upload/image.jpg", quindi non va bene neanche quello.

Avatar utente
j0kers
Linux 2.x
Linux 2.x
Messaggi: 418
Iscritto il: dom 22 lug 2007, 1:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggio da j0kers »

Mi da questo errore:

Codice: Seleziona tutto

Warning: copy(upload/481698140.jpg) [function.copy]: failed to open stream: No such file or directory
la directory upload non esiste. comunque usa $up_path = 'upload';

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:1) gli a capo sono <br> in html
2) come non puoi usarla? in che senso? se intendi usarla senza metterla tra le variabili passate alla funzione, allora "globalizzala"
3) esiste la directory upload dentro il path in cui gira lo script?
1) Ma come faccia a mettere un "a capo" dentro un file?
Come faccio a modificare un "a capo" della descrizione con uno spazio?

2) Proverò a metterla globale.

3) La directory esiste e ha i permessi giusti, il problema è che la funzione "copy()" dice che la destinazione (cioè il secondo parametro) è vuoto :? .

Avatar utente
j0kers
Linux 2.x
Linux 2.x
Messaggi: 418
Iscritto il: dom 22 lug 2007, 1:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggio da j0kers »

Immagine

Uploaded with ImageShack.us

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 »

Prova a caricare un file con degli spazi.

Avatar utente
j0kers
Linux 2.x
Linux 2.x
Messaggi: 418
Iscritto il: dom 22 lug 2007, 1:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggio da j0kers »

Immagine

Uploaded with ImageShack.us
Ho dotuto creare la directory upload manualmente altrimenti non funzionava.

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 »

j0kers ha scritto:Ho dotuto creare la directory upload manualmente altrimenti non funzionava.
Quello è normale.

Prova a caricare dei file "grossi" (intorno ai 10MB).

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 »

ciao ansa89, per il primo dei problemi devi lasciar perdere "\n" ed usare "<br />" al suo posto; infatti per visualizzare l'output del programma stai usando un browser e questi capiscono solo il codice html; per cui "a capo" è "<br />". Se invece tu avessi scritto il testo di una mail e poi l'avessi inviato con il comando mail() di php, allora per andare a capo dovresti usare "\n" (a meno di non voler usare codice html anche per il testo della mail); per gli altri problemi ora guardo

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6628
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Uploader php

Messaggio da targzeta »

In realtà il codice è HTML e quindi "a capo" si traduce con "<BR>", il "\n" funziona uguale ma vale per il sorgente del file generato (prova a visualizzare il sorgente della pagina).

2) Si chiama "scope delle variabili" hai una variabile esterna alla funzione che si chiama $up_path e un parametro della funzione con lo stesso nome, la funzione ovviamente vede il parametro.

3) Quando passia via GET o POST dei nomi dei file o dei path in generale ti conviene sempre codificarli e poi decodificarli, quello che ho notato io è che spesso i parametri vengono modificati (ad esempio ' ' viene sostituito da '_' se non ricordo male).

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
j0kers
Linux 2.x
Linux 2.x
Messaggi: 418
Iscritto il: dom 22 lug 2007, 1:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggio da j0kers »

Con file grossi (11MB) mi ritorna alla posizione iniziale senza nessun messaggio e nessuna copia in upload

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6628
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Uploader php

Messaggio da targzeta »

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"

Emanuele

:edit: Vedi qui per capire meglio la differenza.
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
j0kers
Linux 2.x
Linux 2.x
Messaggi: 418
Iscritto il: dom 22 lug 2007, 1:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggio da j0kers »

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

Rispondi