O lekcji
Upload plików jest często wykorzystywaną funkcjonalnością w aplikacjach webowych. Dzięki HTML i PHP możemy umożliwić użytkownikom przesyłanie plików z ich urządzeń na serwer. W HTML tworzymy formularz z polem typu file
, a w PHP obsługujemy otrzymane dane.
Formularz HTML do uploadu pliku:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Upload pliku</title>
</head>
<body>
<h1>Wybierz plik do wysłania</h1>
<form action="upload.php" method="POST" enctype="multipart/form-data">
<label for="file">Wybierz plik:</label>
<input type="file" name="file" id="file" required>
<button type="submit">Wyślij plik</button>
</form>
</body>
</html>
W powyższym formularzu atrybut enctype="multipart/form-data"
jest niezbędny do poprawnego przesyłania plików.
Obsługa uploadu w PHP:
W PHP pliki wysyłane za pomocą formularza HTML są dostępne w superglobalnej tablicy $_FILES
.
Przykład obsługi uploadu pliku w PHP:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$target_dir = "uploads/"; // Katalog, do którego zapisujemy plik
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// Sprawdzenie, czy plik jest obrazkiem (opcjonalnie)
if (isset($_POST["submit"])) {
$check = getimagesize($_FILES["file"]["tmp_name"]);
if ($check !== false) {
echo "Plik jest obrazkiem - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "Plik nie jest obrazkiem.";
$uploadOk = 0;
}
}
// Sprawdzenie, czy plik już istnieje
if (file_exists($target_file)) {
echo "Przepraszamy, ten plik już istnieje.";
$uploadOk = 0;
}
// Ograniczenie rozmiaru pliku
if ($_FILES["file"]["size"] > 500000) { // Ograniczenie do 500 KB
echo "Plik jest za duży.";
$uploadOk = 0;
}
// Zezwolenie tylko na określone rozszerzenia
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") {
echo "Przepraszamy, tylko pliki JPG, JPEG, PNG, GIF są dozwolone.";
$uploadOk = 0;
}
// Jeśli wszystkie warunki są spełnione, spróbuj przesłać plik
if ($uploadOk == 0) {
echo "Przepraszamy, Twój plik nie został wysłany.";
} else {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
echo "Plik " . htmlspecialchars(basename($_FILES["file"]["name"])) . " został wysłany.";
} else {
echo "Wystąpił problem podczas przesyłania pliku.";
}
}
}
?>
W tym przykładzie:
- Sprawdzamy, czy plik jest obrazkiem – używając funkcji
getimagesize()
. - Sprawdzamy, czy plik już istnieje.
- Ograniczamy rozmiar pliku.
- Sprawdzamy typ pliku (np. tylko JPG, PNG).
- Jeśli wszystkie warunki są spełnione, plik jest przesyłany do folderu
uploads/
.