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:
| Funkcja | Opis |
|---|---|
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) plikdane.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ąć:
- Brak uprawnień do zapisu – folder musi mieć prawa
chmod 755lubchmod 777(tylko w testach!). - Zła ścieżka do pliku – używaj ścieżek względnych lub absolutnych, np.
__DIR__ . "/plik.txt". - Nie zamknięty plik – zawsze wywołuj
fclose()po zapisie/odczycie. - Zapis w niewłaściwym trybie – pamiętaj, że
"w"nadpisuje, a"a"dopisuje. - 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()ifile_get_contents()to najlepszy wybór dla prostych operacji. - Zawsze sprawdzaj, czy plik istnieje i czy masz prawa dostępu.