PHP 5 Filesystem References
§ 1. PHP 5 File Upload
Con PHP è facile caricare files sul server
Questo può costituire un pericolo, pertanto occorre fare molta attenzione quando si consente di caricare i file.
§ 1.1. Configurare il file php.ini
Per prima cosa occorre assicurarsi che PHP sia configurato per accettare il file upload.
Nel file php.ini deve essere presente la direttiva: file_upload = On.
§ 1.2. Creare la form HTML
Per prima cosa occorre creare una form HTML che consenta all'utente di scegliere il file che desidera caricare.
<form action="upload.php" method="post" enctype="multipart/form-data">
Scegli il file da caricare:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" name="Upload Image" name="submit">
</form>
Alcune regole da rispettare nelle form per l'upload:
- Assicurarsi che la form usi usi method="post";
- La form deve possedere l'attributo enctype="multipart/form-data". Specifica quale content-type usare quando la form viene inviata.
Senza rispettare queste regole, l'upload non funzionerà.
Altre cose da notare:
- L'attributo type="file" del campo di input.
§ 1.3. Creare lo script per il file upload.
Il file "upload.php" contiene il codice per il file upload:
<?php
Starget_dir = "uploads/";
$target_file = $target_dir.basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);
/* Controllare se il file immagine è valido. */
if(isset($_POST["submit"])){
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if ($check !== false){
echo "File è un immagine valida - " . $check["mime"]. ".";
$uploadOk = 1;
} else{
echo "Il file non è una immagine valida.";
$uploadOk = 0;
}
}
?>
Spiegazione dello script
- Starget_dir = "uploads/" - specifica la directori di destinazione;
- $target_file specifica il path del file da caricare;
- $uploadOk = 1 sarà usato più avanti;
- $imageFileType contiene l'estensione del file;
- $imageFileType contiene l'estensione del file;
Nota: Occorre creare la directory uploads.
§ 1.3.1. Controllare che il file non esista già.
Se nella cartella di destinazione, uploads, il file esiste già, verrà emesso un messaggio di errore e la variabile $uploadOk sarà settata a .:
if(file_exists($target_file)){
$echo "Mi dispiace, ma il file già esiste";
$uploadOk = 0;
}
§ 1.3.2. Limitare la dimensione del file.
Il campo di input del file nella form si chiama fileToUpload.
Vogliamo che il file non sia più grande di 500KB. Se questo limite non sarà rispettato sarà emesso un messaggo di errore e la variabile $uploadok sarà settata a 0.
if($_FILES["fileToUpload"]["size"] > 500000){
$echo "Mi dispiace, ma il tuo file è troppo grande";
$uploadOk = 0;
}
§ 1.3.3. Limitare le estensioni ammissibili.
Il codice che segue consente all'utente di caricare solo file di tipo: JPG, JPEG, PNG, e GIF.
Se queste restrizioni non saranno rispettate sarà emesso un messaggo di errore e la variabile $uploadok sarà settata a 0.
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif"){
$echo "Mi dispiace, ma sono ammessi solo file JPG, JPEG, PNG e GIF";
$uploadOk = 0;
}
§ 1.3.4. Script completo.
Ecco lo script completo
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Mi dispiace, il file già esiste.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Mi dispiace, il tuo file è troppo grande.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Mi dispiace, sono ammessi solo file JPG, JPEG, PNG & GIF";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Mi dispiace, il tuo file non è stato caricato.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "Il file ". basename( $_FILES["fileToUpload"]["name"]). " è stato caricato.";
} else {
echo "Mi dispiace, si è verificato un errore durante il caricamento del file.";
}
}
?>