Obsługa uploadu plików w PHP

Upload plików w PHP umożliwia użytkownikom przesyłanie np. zdjęć czy dokumentów do Twojej aplikacji. Wykorzystuje tablicę superglobalną $_FILES i wymaga odpowiednich ustawień w php.ini (np. upload_max_filesize, post_max_size) oraz ostrożności, by uniknąć zagrożeń bezpieczeństwa.


Kluczowe elementy obsługi uploadu plików

  • Formularz z typem enctype
    • Do przesyłania plików wymagane jest enctype="multipart/form-data".
    • Metoda formularza powinna być POST.
  • Tablica $_FILES
    • Zawiera informacje o przesłanym pliku: $_FILES['nazwaPliku']['name'], type, tmp_name, error, size.
    • Plik jest najpierw zapisywany w katalogu tymczasowym (tmp_name).
  • move_uploaded_file
    • Służy do przeniesienia pliku z folderu tymczasowego w docelowe miejsce, np. move_uploaded_file($_FILES['plik']['tmp_name'], "upload/" . $_FILES['plik']['name']).
  • Bezpieczeństwo
    • Sprawdzaj rozszerzenie i typ MIME, używaj nazw unikalnych, chroniąc się przed nadpisaniem plików lub atakami.
Przykład
<h3>Formularz uploadu</h3>
<form action="" method="post" enctype="multipart/form-data">
  <label>Wybierz plik: <input type="file" name="mojPlik"></label><br><br>
  <button type="submit">Wyślij</button>
</form>

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (isset($_FILES['mojPlik']) && $_FILES['mojPlik']['error'] === 0) {
    $tmp = $_FILES['mojPlik']['tmp_name'];
    $name = basename($_FILES['mojPlik']['name']);

    // Prosty przykład przeniesienia pliku do folderu "upload/"
    if (move_uploaded_file($tmp, "upload/" . $name)) {
      echo "<p>Plik przesłany pomyślnie jako: $name</p>";
    } else {
      echo "<p>Wystąpił problem z zapisem pliku.</p>";
    }
  } else {
    echo "<p>Nie wybrano pliku lub wystąpił błąd.</p>";
  }
}
?>
Zwrócona zawartość
Formularz z przyciskiem do wgrywania pliku
Po przesłaniu – komunikat „Plik przesłany pomyślnie” lub błąd

Przykładowe zastosowania uploadu plików

  • Dodawanie zdjęć użytkowników
    • Profile w portalu społecznościowym lub w systemie CMS.
  • Formularze kontaktowe z załącznikiem
    • Możliwość dołączania np. CV lub dokumentów ofertowych.
  • Systemy galerii
    • Użytkownik może wrzucać zdjęcia, a skrypt zapisuje je na serwerze i wyświetla miniatury.

Podsumowanie

  • Do wgrywania plików używaj enctype="multipart/form-data" i metody POST w formularzu.
  • Plik tymczasowo trafia do katalogu tmp, skąd możesz go przenieść funkcją move_uploaded_file.
  • Pamiętaj o bezpieczeństwie – weryfikuj rozszerzenia, typy MIME i nazwy plików.
  • Zwiększ parametry upload_max_filesize i post_max_size w php.ini, jeśli potrzebujesz obsługi większych plików.