Lekcja 7 – Obsługa plików w PHP

Obsługa plików w PHP – wprowadzenie

PHP oferuje szeroki zestaw funkcji do pracy z plikami, które umożliwiają otwieranie, odczytywanie, zapisywanie i modyfikowanie plików. Dzięki tym funkcjom możemy np. przechowywać dane użytkowników w plikach tekstowych, tworzyć dzienniki (logi) dla aplikacji lub generować dynamiczne pliki, takie jak raporty. W tej lekcji omówimy podstawowe operacje na plikach w PHP.

Otwieranie pliku za pomocą fopen()

Funkcja fopen() służy do otwierania pliku. Wymaga dwóch parametrów:

  • nazwa pliku: Ścieżka do pliku, który chcemy otworzyć,
  • tryb otwarcia: Określa sposób, w jaki chcemy otworzyć plik (np. tylko do odczytu, zapisu itp.).

Przykład otwierania pliku do odczytu:

<?php
  $plik = fopen("plik.txt", "r");

  if ($plik) {
    echo "Plik został otwarty pomyślnie.";
  } else {
    echo "Nie udało się otworzyć pliku.";
  }

  fclose($plik); // Zamykanie pliku
?>

Tryby otwierania plików

W PHP istnieje kilka trybów otwierania plików, które określają, jak plik będzie używany:

  • r: Otwiera plik tylko do odczytu. Wskaźnik pliku znajduje się na początku pliku.
  • w: Otwiera plik do zapisu. Jeśli plik istnieje, jego zawartość zostanie nadpisana; jeśli plik nie istnieje, zostanie utworzony.
  • a: Otwiera plik do zapisu, ale dane będą dopisywane na końcu pliku. Jeśli plik nie istnieje, zostanie utworzony.
  • r+: Otwiera plik do odczytu i zapisu. Wskaźnik pliku znajduje się na początku pliku.
  • w+: Otwiera plik do odczytu i zapisu, ale zawartość pliku zostanie nadpisana. Jeśli plik nie istnieje, zostanie utworzony.
  • a+: Otwiera plik do odczytu i zapisu. Dane będą dopisywane na końcu pliku. Jeśli plik nie istnieje, zostanie utworzony.

Odczytywanie zawartości pliku

PHP oferuje kilka funkcji do odczytywania zawartości pliku:

1. fgets(): Odczytuje jedną linię z pliku.

<?php
  $plik = fopen("plik.txt", "r");

  if ($plik) {
    while (($linia = fgets($plik)) !== false) {
      echo $linia . "<br>";
    }
    fclose($plik);
  } else {
    echo "Nie udało się otworzyć pliku.";
  }
?>

2. fread(): Odczytuje określoną liczbę bajtów z pliku.

<?php
  $plik = fopen("plik.txt", "r");
  $zawartość = fread($plik, filesize("plik.txt")); // Odczyt całego pliku
  echo $zawartość;
  fclose($plik);
?>

3. file_get_contents(): Najprostszy sposób na odczytanie całego pliku do jednej zmiennej.

<?php
  $zawartość = file_get_contents("plik.txt");
  echo $zawartość;
?>

Zapis do pliku

Aby zapisać dane do pliku, możemy użyć funkcji fwrite() lub file_put_contents().

Przykład zapisu danych za pomocą fwrite():

<?php
  $plik = fopen("plik.txt", "w"); // Otwieramy plik w trybie zapisu

  if ($plik) {
    fwrite($plik, "To jest nowa zawartość pliku.\n");
    fwrite($plik, "Kolejna linia.\n");
    fclose($plik);
    echo "Dane zostały zapisane.";
  } else {
    echo "Nie udało się otworzyć pliku.";
  }
?>

Przykład zapisu danych za pomocą file_put_contents():

<?php
  $tekst = "To jest nowa zawartość pliku.";
  file_put_contents("plik.txt", $tekst);
  echo "Dane zostały zapisane.";
?>

Funkcja file_put_contents() nadpisuje zawartość pliku. Jeśli chcesz dodać dane na końcu pliku, możesz użyć drugiego parametru FILE_APPEND:

<?php
  $tekst = "Nowa linia tekstu.\n";
  file_put_contents("plik.txt", $tekst, FILE_APPEND);
  echo "Dane zostały dopisane do pliku.";
?>

Zamykanie pliku

Po zakończeniu pracy z plikiem, zawsze należy go zamknąć za pomocą funkcji fclose(). Zamknięcie pliku zwalnia zasoby systemowe.

<?php
  $plik = fopen("plik.txt", "r");
  // Operacje na pliku
  fclose($plik);
?>

Sprawdzanie, czy plik istnieje

Zanim spróbujemy otworzyć lub zapisać do pliku, dobrze jest upewnić się, że plik istnieje. Możemy to zrobić za pomocą funkcji file_exists():

<?php
  if (file_exists("plik.txt")) {
    echo "Plik istnieje.";
  } else {
    echo "Plik nie istnieje.";
  }
?>

Usuwanie plików

Aby usunąć plik, używamy funkcji unlink():

<?php
  if (file_exists("plik.txt")) {
    unlink("plik.txt");
    echo "Plik został usunięty.";
  } else {
    echo "Plik nie istnieje.";
  }
?>

Przykład kompleksowy: Tworzenie i zapisywanie pliku z danymi formularza

Załóżmy, że mamy formularz, w którym użytkownik podaje swoje imię i wiek. Dane te zostaną zapisane do pliku.

Formularz HTML:

<form action="zapisz.php" method="post">
  Imię: <input type="text" name="imie"><br>
  Wiek: <input type="number" name="wiek"><br>
  <input type="submit" value="Zapisz dane">
</form>

Plik PHP zapisz.php:

<?php
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $imie = htmlspecialchars($_POST['imie']);
    $wiek = htmlspecialchars($_POST['wiek']);

    $dane = "Imię: " . $imie . "\nWiek: " . $wiek . "\n\n";

    file_put_contents("dane.txt", $dane, FILE_APPEND);
    echo "Dane zostały zapisane.";
  }
?>

W tym przykładzie dane wprowadzone przez użytkownika są zapisywane do pliku dane.txt, a każda nowa para imię-wiek jest dopisywana na końcu pliku.

Podsumowanie

W tej lekcji nauczyliśmy się podstawowych operacji na plikach w PHP, takich jak otwieranie, odczytywanie, zapisywanie i zamykanie plików. Omówiliśmy różne tryby otwierania plików oraz funkcje ułatwiające pracę z nimi. Zrozumienie obsługi plików jest kluczowe dla wielu zastosowań PHP, w tym przechowywania danych, generowania logów czy tworzenia dynamicznych treści.

Gratulacje! Ukończyłeś lekcję 7.
Przejdź teraz do lekcji 8 >> Sesje i ciasteczka w PHP


Spis Treści - darmowy kurs PHP

Wprowadzenie: Instalacja środowiska PHP
Lekcja 1: Podstawy składni PHP
Lekcja 2: Funkcje i instrukcje warunkowe w PHP
Lekcja 3: Pętle w PHP
Lekcja 4: Tablice w PHP
Lekcja 5: Dodatkowe podstawy funkcji w PHP
Lekcja 6: Praca z formularzami HTML w PHP
Lekcja 7: Obsługa plików w PHP
Lekcja 8: Sesje i ciasteczka w PHP
Lekcja 9: Podstawy operacji na bazach danych MySQL z PHP
Lekcja 10: Prepared Statements w PHP i bezpieczeństwo aplikacji
Lekcja 11: Zarządzanie użytkownikami – rejestracja, logowanie i autoryzacja w PHP
Lekcja 12: Wzorce projektowe w PHP – wprowadzenie do wzorca MVC
Lekcja 13: Zaawansowane techniki pracy z bazami danych w PHP
Lekcja 14: Testowanie jednostkowe w PHP z PHPUnit
Lekcja 15: Tworzenie i korzystanie z API RESTful w PHP
Lekcja 16: Obsługa plików JSON i XML w PHP

Dodatki
- Spis najważniejszych funkcji PHP