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.

Uploader php

Messaggioda Ansa89 » mar giu 15, 2010 9:50

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

Re: Uploader php

Messaggioda j0kers » mar giu 15, 2010 10:38

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 giu 15, 2010 10:48, modificato 1 volta in totale.
Avatar utente
j0kers
Linux 2.4
Linux 2.4
 
Messaggi: 418
Iscritto il: dom lug 22, 2007 0:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggioda conraid » mar giu 15, 2010 10:43

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

Re: Uploader php

Messaggioda Ansa89 » mar giu 15, 2010 10:49

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

Re: Uploader php

Messaggioda j0kers » mar giu 15, 2010 10:52

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
j0kers
Linux 2.4
Linux 2.4
 
Messaggi: 418
Iscritto il: dom lug 22, 2007 0:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggioda Ansa89 » mar giu 15, 2010 10:56

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

Re: Uploader php

Messaggioda j0kers » mar giu 15, 2010 11:08

Immagine

Uploaded with ImageShack.us
Avatar utente
j0kers
Linux 2.4
Linux 2.4
 
Messaggi: 418
Iscritto il: dom lug 22, 2007 0:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggioda Ansa89 » mar giu 15, 2010 11:11

Prova a caricare un file con degli spazi.
Avatar utente
Ansa89
Iper Master
Iper Master
 
Messaggi: 2619
Iscritto il: mer ago 29, 2007 16:57
Località: Modena
Nome Cognome: Stefano Ansaloni
Slackware: 13.1
Kernel: 3.15.5-ck1
Desktop: XFCE 4.6.1

Re: Uploader php

Messaggioda j0kers » mar giu 15, 2010 11:15

Immagine

Uploaded with ImageShack.us
Ho dotuto creare la directory upload manualmente altrimenti non funzionava.
Avatar utente
j0kers
Linux 2.4
Linux 2.4
 
Messaggi: 418
Iscritto il: dom lug 22, 2007 0:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggioda Ansa89 » mar giu 15, 2010 11:31

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

Re: Uploader php

Messaggioda Paoletta » mar giu 15, 2010 11:33

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

Re: Uploader php

Messaggioda targzeta » mar giu 15, 2010 11:38

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: Uploader php

Messaggioda j0kers » mar giu 15, 2010 11:43

Con file grossi (11MB) mi ritorna alla posizione iniziale senza nessun messaggio e nessuna copia in upload
Avatar utente
j0kers
Linux 2.4
Linux 2.4
 
Messaggi: 418
Iscritto il: dom lug 22, 2007 0:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Re: Uploader php

Messaggioda targzeta » mar giu 15, 2010 11:47

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.
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: Uploader php

Messaggioda j0kers » mar giu 15, 2010 11:57

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
Avatar utente
j0kers
Linux 2.4
Linux 2.4
 
Messaggi: 418
Iscritto il: dom lug 22, 2007 0:31
Slackware: 13
Kernel: 2.6.32
Desktop: xfce4

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti