Caricamento file PHP
Con PHP, è facile caricare file sul server.
Tuttavia, con facilità arriva il pericolo, quindi fai sempre attenzione quando consenti il caricamento di file!
Configura il file "php.ini".
Innanzitutto, assicurati che PHP sia configurato per consentire il caricamento di file.
Nel tuo file "php.ini", cerca la file_uploads
direttiva e impostala su On:
file_uploads = On
Crea il modulo HTML
Successivamente, crea un modulo HTML che consenta agli utenti di scegliere il file immagine che desiderano caricare:
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post"
enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
Alcune regole da seguire per il modulo HTML sopra:
- Assicurati che il modulo utilizzi method="post"
- Il modulo necessita anche del seguente attributo: enctype="multipart/form-data". Specifica quale tipo di contenuto utilizzare durante l'invio del modulo
Senza i requisiti di cui sopra, il caricamento del file non funzionerà.
Altre cose da notare:
- L'attributo type="file" del tag <input> mostra il campo di input come controllo di selezione file, con un pulsante "Sfoglia" accanto al controllo di input
Il modulo sopra invia i dati a un file chiamato "upload.php", che creeremo di seguito.
Crea lo script PHP del file di caricamento
Il file "upload.php" contiene il codice per caricare un file:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
strtolower(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;
}
}
?>
Spiegazione dello script PHP:
- $target_dir = "uploads/" - specifica la directory in cui verrà posizionato il file
- $target_file specifica il percorso del file da caricare
- $uploadOk=1 non è ancora utilizzato (sarà utilizzato in seguito)
- $imageFileType contiene l'estensione del file (in minuscolo)
- Quindi, controlla se il file immagine è un'immagine reale o un'immagine falsa
Nota: dovrai creare una nuova directory chiamata "uploads" nella directory in cui risiede il file "upload.php". I file caricati verranno salvati lì.
Controlla se il file esiste già
Ora possiamo aggiungere alcune restrizioni.
Innanzitutto, verificheremo se il file esiste già nella cartella "caricamenti". In tal caso, viene visualizzato un messaggio di errore e $uploadOk è impostato su 0:
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
Limita la dimensione del file
Il campo di input del file nel nostro modulo HTML sopra è denominato "fileToUpload".
Ora, vogliamo controllare la dimensione del file. Se il file è più grande di 500 KB, viene visualizzato un messaggio di errore e $uploadOk è impostato su 0:
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
Limita il tipo di file
Il codice seguente consente agli utenti di caricare solo file JPG, JPEG, PNG e GIF. Tutti gli altri tipi di file danno un messaggio di errore prima di impostare $uploadOk su 0:
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
Completa il caricamento dello script PHP del file
Il file "upload.php" completo ora si presenta così:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
strtolower(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 "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])).
" has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Riferimento completo al file system PHP
Per un riferimento completo delle funzioni del filesystem, vai al nostro riferimento completo al filesystem PHP .