Il logo del sito

Appunti su PHP

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>
            
Scegli il file da caricare:

Alcune regole da rispettare nelle form per l'upload:

Senza rispettare queste regole, l'upload non funzionerà.

Altre cose da notare:

§ 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

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.";
    }
}
?>