Con php è possibile effettuare l’upload di files in modo semplicissimo. In questo script, compatibile anche con le versioni precedenti alla 4.03 di php, verranno esaminate in dettaglio le tecniche per effettuare l’upload di files sul server remoto.
Per prima cosa dobbiamo creare la pagina "form.html", contenente il form che permette all’utente di effettuare l’upload:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="upfile">
<input type="hidden" name="MAX_FILE_SIZE" value="10000">
<input type="submit" value="Invia il file">
</form>
Il campo nascosto con nome MAX_FILE_SIZE serve a definire la dimensione massima del file da uploadare, questo parametro può essere settato anche nel file di configurazione di php (php.ini), garantendo una maggiore sicurezza.
La pagina "form.html" può essere integrata facilmente in un documento html o in una pagina php, magari con un include:
include("form.html");
Prima di procedee dello script vero e proprio, dobbiamo sapere che per scrivere in una cartella, e
quindi per copiarvi al suo interno il file precre alla realizzazionedentemente uploadato,
questa deve avere i giusti permessi chmod per la scrittura (777).
Dopo aver creato una nuova cartella sul server remoto, bisogna rinominarla in "upload", sarà la directory in cui verranno spostati tutti i files uploadati.
Dopo l’upload, verrà automaticamente creato da php un array globale $HTTP_POST_FILES, che continene i files uploadati.
Nelle versioni successive alla 4.03, questi array globali prendono il nome $_FILES, quindi dobbiamo rendere compatibile lo script con le versioni precedenti e succesive allla 4.03 con questo codice:
if(!isset($_FILES)) {
$_FILES = $HTTP_POST_FILES;
}
if(!isset($_SERVER)) {
$_SERVER = $HTTP_SERVER_VARS;
}
Con queste poche righe di codice viene effettuato un controllo sull’esistenza dell’array $_FILES, se l’array non esiste viene creato e viene assegnato come suo valore, il valore dell’array $HTTP_POST_FILES, lo stesso procedimento viene effettuato anche con $SERVER.
Ora che sarà compatibile con tutte le versioni di php possiamo procedere all’implementazione dello script che gestisce gli upload.
<?php
/*Compatibilità con le versioni di php precedenti alla 4.1.0*/
if(!isset($_FILES)) {
$_FILES = $HTTP_POST_FILES;
}
if(!isset($_SERVER)) {
$_SERVER = $HTTP_SERVER_VARS;
}
/*Nuovo nome da dare al file uploadato, può anche non essere assegnato*/
$nuovo_nome = "";
//*Percorso assoluto della cartella dove si desiderano salvare i files uploadati, la cartella deve avere i permessi 777*/
$upload_dir = $_SERVER["DOCUMENT_ROOT"] . "/upload/";
/*Se non è stato indicato un nuovo nome, il nome del file sarà lo stesso di quello uploadato*/
if ($nuovo_nome==""){
$nuovo_nome=$_FILES["upfile"]["name"];
}else{
$nome_file=$nuovo_nome;
}
/*Controllo il nome del file per verificare se è stato uploadato*/
if(trim($_FILES["upfile"]["name"]) == "") {
die("Devi indicare il file che desideri caricare");
}
/*Controllo il file che è stato uploadato e lo sposto nella cartella definita nella variabile $upload_dir*/
if(@is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
@move_uploaded_file($_FILES["upfile"]["tmp_name"], "$upload_dir/$nome_file")
or die("Non riesco a spostare il file, controlla che siano stati assegnati i permessi 777 alla cartella di destinazione dei file uploadati");
} else {
die("C'è stato un problema con l'upload, prova di nuovo o contatta il webmaster " . $_FILES["upfile"]["name"]);
}
/*Informo l'utente che l'upload è stato eseguito correttamente*/
echo "L'upload del file " . $_FILES["upfile"]["name"] . " è stato eseguito con successo";
?>
Come avrete notato lo script è semplicissimo, dopo aver effettuato il controllo di compatibilità e aver settato il valore di alcune variabili (descritte nei commenti), viene effettuato l’upload e il file viene spostato, tramite l’istruzione move_uploaded_file, nella cartella di destinazione (quella definita nella variabile $upload_dir).
Per arricchire lo script con altre funzionalità, si può procedere alla verifica delle estensioni dei files uploadati ed accettare solo quelli che preferiamo.
Se ad esempio vogliamo permettere all’utente di effettuare l’upload solo di immagini, dobbiamo specificarlo in questo modo:
<?php
/*Memorizzo nell'array $files_permessi, le estensioni di files che si possono uploadare*/
$files_permessi = array("image/gif","image/x-png","image/pjpeg","image/jpeg");
/*Controllo che il files uploadato abbia una delle estensioni permesse*/
if(!in_array($_FILES["upfile"]["type"],$files_permessi) {
/*In caso contrario informo l'utente*/
die("L'estensione del file non è consentite, sono ammessi solo i files di tipo: " . implode(",", $files_permessi) . ".");
}
?>
E’ possibile implementare nuove funzioni allo script, magari posizionando i files uploadati in cartelle diverse, in base al tipo di file.
Popularity: 4% [?]
Vuoi essere sempre aggiornato??? Iscriviti ai feed o invia un trackback
Nessun commento, scrivi tu il primo!
Articoli correlati