Risultati da 1 a 8 di 8
-
01-12-2007, 19:20 #1
- Data Registrazione
- Jun 2007
- Messaggi
- 155
php question - limitazione upload file
//Creaiamo un array con i tipi di file che consentiamo di Hostare.
$fileconsentiti = array(
'image/pjpeg' => 'jpg',
'image/jpeg' => 'jpg',
'image/jpeg' => 'jpeg',
'image/gif' => 'gif',
'image/X-PNG' => 'png',
'image/PNG' => 'png',
'image/png' => 'png',
'image/x-png' => 'png',
'image/JPG' => 'jpg',
'image/GIF' => 'gif',
'image/bmp' => 'bmp',
'image/bmp' => 'BMP',
'application/pdf' => 'PDF',
'text/plain' => 'TXT',
'application/zip' => 'ZIP',
'image/tiff' => 'TIFF',
);
//se il file non è del formato che vogliamo non eseguiamo il php!
if(in_array($UploadedFile_type,$fileconsentiti) != 0)
{
print("Non è possibile postare una estensione di questo tipo!");
exit;
}
Domanda, cosa sbaglio in questo codice?
-
01-12-2007, 21:31 #2
Un po' di tutto ...
Prima, se non hai bisogno dei tipi mime, lasciali e crei un array senza chiavi.
Poi, qui dici:
if(in_array($UploadedFile_type,$fileconsentiti) != 0)
Se $UploadedFile_type è in $fileconsentiti, allora mostra il messaggio ...
Il ché non è vero. Vuoi far vedere il messaggio quando non è contenuto nell'array, oppure no?
Qui sotto il codice aggiustato, ed ottimizzato a parte dell'array.
Cerca di non fare troppi confronti e implementa solo quello che ti serve. in_array() restituisce un booleano, per cui è sufficiente fare if(in_array(...)) per le condizioni vere e if(!in_array(...)) per le condizioni false. Lo stesso vale quasi per tutte le variabili, stringhe incluse:
if('') = FALSE
if('abc') = TRUE
if('0') = FALSE
if('1') = TRUE
Inoltre è buona pratica di non usare nomi di variabili con alti e bassi ($UploadedFile_type) ma tutto in minuscolo, e per costanti definiti tutto in maiuscolo (TIMENOW, TABLE_PREFIX, TRUE, FALSE). Rientrare il codice sempre con la massima cura, facilita la lettura. La tabulazione di 4 caratteri è ottima per tutte le situazioni.
Questo per evitare problemi in un secondo momento.
Codice PHP:$fileconsentiti = array(
'image/pjpeg' => 'jpg',
'image/jpeg' => 'jpg',
'image/jpeg' => 'jpeg',
'image/gif' => 'gif',
'image/X-PNG' => 'png',
'image/PNG' => 'png',
'image/png' => 'png',
'image/x-png' => 'png',
'image/JPG' => 'jpg',
'image/GIF' => 'gif',
'image/bmp' => 'bmp',
'image/bmp' => 'BMP',
'application/pdf' => 'PDF',
'text/plain' => 'TXT',
'application/zip' => 'ZIP',
'image/tiff' => 'TIFF',
);
//se il file non è del formato che vogliamo non eseguiamo il php!
if(!in_array($uploadedfile_type, $fileconsentiti))
{
echo 'Non è possibile postare un\'estensione di questo tipo!';
die;
}
Giovanni
http://www.trimelli.com/
Per favore non mandatemi PM, ma scrivete sul forum. Vi sarà risposto prima.
-
02-12-2007, 19:11 #3
- Data Registrazione
- Jun 2007
- Messaggi
- 155
La differenza tra die ed exit?
E tra echo e print?
-
02-12-2007, 23:21 #4
Con die esci da ogni genere di esecuzione, simile ad exit. E' più efficiente.
echo è più efficiente di print, ma sono solo differenze di qualche frazione di millisecondo.Giovanni
http://www.trimelli.com/
Per favore non mandatemi PM, ma scrivete sul forum. Vi sarà risposto prima.
-
02-12-2007, 23:22 #5
E l'utilizzo delle singole virgolette è molto più efficiente
Giovanni
http://www.trimelli.com/
Per favore non mandatemi PM, ma scrivete sul forum. Vi sarà risposto prima.
-
03-12-2007, 19:26 #6
- Data Registrazione
- Jun 2007
- Messaggi
- 155
Altra domanda, se io volessi confrontare il nome del file uplodato con tutti gli altri presenti nella cartella di destinazione. Come posso fare?
Il codice comunque non funziona, te lo posto per intero:
<HTML>
<HEAD>
<TITLE>Upload in php</TITLE>
</HEAD>
<BODY>
<?
$fileconsentiti = array(
'image/pjpeg' => 'jpg',
'image/jpeg' => 'jpg',
'image/jpeg' => 'jpeg',
'image/gif' => 'gif',
'image/X-PNG' => 'png',
'image/PNG' => 'png',
'image/png' => 'png',
'image/x-png' => 'png',
'image/JPG' => 'jpg',
'image/GIF' => 'gif',
'image/bmp' => 'bmp',
'image/bmp' => 'BMP',
'application/pdf' => 'PDF',
'text/plain' => 'TXT',
'application/zip' => 'ZIP',
'image/tiff' => 'TIFF',
);
//se il file non è del formato che vogliamo non eseguiamo il php!
if(!in_array($uploadedfile_type, $fileconsentiti))
{
echo 'Non è possibile postare un\'estensione di questo tipo!';
die;
}
$path="indirizzofornitodaaruba"; //indirizzo di dove vogliamo che il file vada nel server! Cartella uploadutenti in questo caso.
if( $UploadedFile != none )
{
/*print("Percorso locale: $UploadedFile <BR>\n");
print("Nome del file: $UploadedFile_name <BR>\n");
print("Dimensione del file: $UploadedFile_size <BR>\n");
print("Tipo di file: $UploadedFile_type <BR>\n");
print("<HR>");*/
//Fine del blocco
if (copy( $UploadedFile , "$path/$UploadedFile_name" )){
// print "$UploadedFile copiato con successo in $path/$UploadFile_name<br>";
}else{
print "Errore.. upload non riuscito<br>";
}
unlink($UploadedFile);
}else{
print "Errore.. nessun file.<br>";
}
print("<br/><br/>L'indirizzo del file da te hostato è: www.everythingworld.eu/uploadutenti/$UploadedFile_name");
?>
<p><a href="http://www.everythingworld.eu/uploadutenti/<?php echo $UploadedFile_name ?>">LINK DEL
FILE DA VOI HOSTATO</a></p>
</BODY>
</HTML>Ultima modifica di derfel; 03-12-2007 alle 23:13
-
05-12-2007, 19:21 #7
Credo con la funzione dir(). Oppure fai un tentativo di sola lettura di un file con lo stesso nome. Se fallisce, non c'è
Giovanni
http://www.trimelli.com/
Per favore non mandatemi PM, ma scrivete sul forum. Vi sarà risposto prima.
-
05-12-2007, 22:38 #8
- Data Registrazione
- Jun 2007
- Messaggi
- 155
Discussioni Simili
-
vBulletin 3.6.x Congfig file php
Di Nero nel forum VBulletin 3Risposte: 5Ultimo Messaggio: 12-07-2007, 13:28 -
vBulletin 3.5.x file php....
Di super_mario_nos nel forum VBulletin 3Risposte: 18Ultimo Messaggio: 12-09-2006, 01:04
Segnalibri