Kursy i Poradniki IT - Adrian Kowalski
Kurs Programowania PHP dla Początkujących
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/.