Funkcje PHP do obsługi plików TXT

Czy kiedykolwiek chciałeś, żeby Twój skrypt PHP mógł odczytać, zapisać lub edytować plik tekstowy .txt? Jeśli tak – jesteś w idealnym miejscu. W tym artykule pokażę Ci wszystko, co musisz wiedzieć o funkcjach PHP do obsługi plików tekstowych, w tym praktyczne przykłady kodu, najlepsze praktyki i kilka pro tipów, które przydadzą Ci się w codziennej pracy.

Dlaczego warto pracować z plikami TXT w PHP?

Pliki tekstowe to najprostszy sposób na przechowywanie danych. Nie potrzebujesz bazy danych, skomplikowanej konfiguracji ani serwera SQL. Wystarczy zwykły plik .txt, a PHP daje Ci zestaw funkcji, które pozwalają:

  • tworzyć nowe pliki,
  • zapisywać do nich dane,
  • odczytywać ich zawartość,
  • dopisywać kolejne linie tekstu,
  • usuwać lub zmieniać dane,
  • a nawet przetwarzać pliki linia po linii.

To bardzo przydatne np. w sytuacjach, gdy:

  • chcesz prowadzić prosty log błędów lub odwiedzin użytkowników,
  • zapisujesz dane z formularza kontaktowego,
  • testujesz skrypty bez użycia bazy danych,
  • chcesz przechowywać konfigurację lub dane tymczasowe.

Podstawowe funkcje PHP do obsługi plików

Zanim zaczniemy pisać kod, warto poznać kilka podstawowych funkcji, które PHP udostępnia do pracy z plikami:

FunkcjaOpis
fopen()Otwiera plik w wybranym trybie (np. do odczytu lub zapisu)
fwrite()Zapisuje dane do otwartego pliku
fread()Odczytuje dane z pliku
fgets()Czyta pojedynczą linię tekstu
file_get_contents()Pobiera cały plik jako jeden ciąg tekstu
file_put_contents()Tworzy plik lub zapisuje dane w prosty sposób
fclose()Zamyka otwarty plik
unlink()Usuwa plik z dysku

Z tych kilku funkcji można już zbudować prosty system do obsługi plików tekstowych. Zobaczmy teraz, jak to działa w praktyce.

Tworzenie nowego pliku TXT w PHP

Zacznijmy od podstaw – jak utworzyć nowy plik tekstowy i zapisać w nim dane?

<?php
$plik = fopen("dane.txt", "w"); // "w" - otwiera plik do zapisu, tworzy nowy jeśli nie istnieje

if ($plik) {
    fwrite($plik, "To jest pierwsza linia w pliku.\n");
    fwrite($plik, "A to druga linia tekstu!");
    fclose($plik);
    echo "Plik został utworzony i zapisany pomyślnie!";
} else {
    echo "Nie udało się otworzyć pliku!";
}
?>

W tym przykładzie:

  • fopen() otwiera (lub tworzy) plik dane.txt.
  • fwrite() zapisuje tekst do pliku.
  • fclose() zamyka plik (zawsze pamiętaj o tym kroku!).
  • Tryb "w" oznacza, że plik zostanie nadpisany, jeśli już istnieje.

Pro tip: Jeśli chcesz dopisać dane na końcu pliku zamiast nadpisywać go – użyj trybu "a" (append).

Dopisywanie tekstu do istniejącego pliku

Czasem nie chcesz kasować starej zawartości – tylko dopisać coś nowego, np. logi lub dane użytkowników.

<?php
$plik = fopen("dane.txt", "a"); // "a" - otwiera plik do dopisywania

if ($plik) {
    fwrite($plik, "\nNowa linia dopisana do pliku.");
    fclose($plik);
    echo "Tekst został dopisany pomyślnie!";
} else {
    echo "Nie udało się otworzyć pliku!";
}
?>

Efekt? Nowa linia zostanie dodana na końcu pliku, bez usuwania istniejących danych.

Odczytywanie danych z pliku TXT

Okej, zapisaliśmy już coś do pliku. Teraz zobaczmy, jak te dane odczytać.

Metoda 1 – file_get_contents() (najprostsza)

<?php
$zawartosc = file_get_contents("dane.txt");
echo nl2br($zawartosc);
?>

Ta funkcja wczytuje cały plik naraz i zwraca go jako ciąg tekstu.
Dzięki nl2br() zamieniamy znaki nowej linii \n na <br>, żeby wyświetlić tekst w przeglądarce w formacie wielowierszowym.

Metoda 2 – czytanie linia po linii z fgets()

Czasem chcesz przetwarzać plik krok po kroku, np. w pętli:

<?php
$plik = fopen("dane.txt", "r"); // "r" - tylko do odczytu

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

Tutaj używamy:

  • feof() – sprawdza, czy doszliśmy do końca pliku,
  • fgets() – pobiera kolejną linię tekstu,
  • htmlspecialchars() – zabezpiecza przed wstrzyknięciem HTML-a.

Zapis i odczyt za pomocą jednej funkcji

PHP ma też skróty, które ułatwiają życie – np. file_put_contents() i file_get_contents().
Dzięki nim możesz zapisywać i odczytywać pliki w jednej linijce!

Zapis:

<?php
file_put_contents("notatka.txt", "To moja pierwsza notatka w PHP!");
echo "Plik został zapisany!";
?>

Dopisywanie do pliku (bez nadpisywania):

<?php
file_put_contents("notatka.txt", "\nDopisuję nową linię.", FILE_APPEND);
?>

Ten sposób jest idealny dla szybkich skryptów lub logów.

Usuwanie pliku w PHP

Jeśli chcesz całkowicie usunąć plik z serwera, możesz użyć funkcji unlink():

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

Uwaga: tej operacji nie da się cofnąć – po usunięciu plik znika bezpowrotnie.

Sprawdzanie istnienia i uprawnień pliku

Zanim otworzysz lub zapiszesz plik, warto sprawdzić, czy w ogóle istnieje oraz czy PHP ma odpowiednie uprawnienia:

<?php
$plik = "dane.txt";

if (file_exists($plik)) {
    echo "Plik istnieje!<br>";
    
    if (is_readable($plik)) {
        echo "Plik można odczytać.<br>";
    }
    if (is_writable($plik)) {
        echo "Plik można edytować.<br>";
    }
} else {
    echo "Plik nie został jeszcze utworzony.";
}
?>

To bardzo przydatne, gdy Twój skrypt działa na różnych serwerach lub z różnymi uprawnieniami (np. w środowisku produkcyjnym).

Przykład – prosty system logowania zdarzeń

A teraz coś praktycznego. Zróbmy system logów zapisujący datę i adres IP użytkownika, który odwiedza stronę:

<?php
$plik = "logi.txt";
$data = date("Y-m-d H:i:s");
$ip = $_SERVER['REMOTE_ADDR'];

$wiadomosc = "[$data] - Odwiedziny z adresu IP: $ip\n";

file_put_contents($plik, $wiadomosc, FILE_APPEND);
?>

Za każdym razem, gdy ktoś wejdzie na stronę, do pliku logi.txt zostanie dopisana nowa linia z datą i IP odwiedzającego.
Proste, a jakże użyteczne!

Wczytywanie danych z pliku i przetwarzanie ich

Załóżmy, że mamy plik uzytkownicy.txt, a w nim dane w formacie:

Jan Kowalski
Anna Nowak
Piotr Wiśniewski

Chcemy wczytać je do tablicy PHP i wyświetlić jako listę:

<?php
$dane = file("uzytkownicy.txt", FILE_IGNORE_NEW_LINES);

foreach ($dane as $uzytkownik) {
    echo "- " . htmlspecialchars($uzytkownik) . "<br>";
}
?>

Funkcja file() automatycznie tworzy tablicę, w której każda linia pliku jest osobnym elementem.
Dzięki opcji FILE_IGNORE_NEW_LINES PHP usuwa znaki nowej linii \n z końca każdej linii.

Najczęstsze błędy przy pracy z plikami w PHP

Praca z plikami to banał… dopóki coś nie pójdzie nie tak 😅
Oto kilka typowych błędów i jak ich uniknąć:

  1. Brak uprawnień do zapisu – folder musi mieć prawa chmod 755 lub chmod 777 (tylko w testach!).
  2. Zła ścieżka do pliku – używaj ścieżek względnych lub absolutnych, np. __DIR__ . "/plik.txt".
  3. Nie zamknięty plik – zawsze wywołuj fclose() po zapisie/odczycie.
  4. Zapis w niewłaściwym trybie – pamiętaj, że "w" nadpisuje, a "a" dopisuje.
  5. Nieprawidłowe kodowanie – plik zapisany np. w UTF-16 może nie wyświetlać się poprawnie. Używaj UTF-8.

Jak widzisz, obsługa plików TXT w PHP to nic trudnego.
Wystarczy kilka funkcji, trochę logiki i możesz:

  • zapisywać dane użytkowników,
  • tworzyć logi,
  • generować raporty,
  • przechowywać konfigurację,
  • a nawet budować proste bazy danych w oparciu o pliki tekstowe!

Najważniejsze, żeby rozumieć, jak działają tryby otwierania pliku (r, w, a) i zawsze zamykać plik po użyciu.
Jeśli zależy Ci na prostocie, korzystaj z file_put_contents() i file_get_contents() — to złoty standard do szybkiej pracy.

Jeśli chcesz sprawdzić rozmiar pliku .txt, użyj funkcji filesize():

<?php
$plik = "dane.txt";
if (file_exists($plik)) {
    echo "Rozmiar pliku: " . filesize($plik) . " bajtów.";
}
?>

Mała rzecz, a potrafi się przydać np. przy monitorowaniu logów.

Podsumowując:

  • PHP ma potężny zestaw funkcji do pracy z plikami TXT.
  • Możesz je łatwo otwierać, zapisywać, czytać i usuwać.
  • Funkcje file_put_contents() i file_get_contents() to najlepszy wybór dla prostych operacji.
  • Zawsze sprawdzaj, czy plik istnieje i czy masz prawa dostępu.
Szukasz taniego i dobrego hostingu dla swojej strony www? - Sprawdź Seohost.pl