Jeśli kiedykolwiek pracowałeś z plikami w PHP, prawdopodobnie zastanawiałeś się, jak sprawdzić, czy dany plik istnieje i czy rzeczywiście jest plikiem (a nie katalogiem czy symbolicznym linkiem). Tutaj do akcji wchodzi funkcja is_file. W tym artykule rozłożymy jej działanie na czynniki pierwsze, pokażemy przykłady jej zastosowań, a na koniec wspólnie stworzymy kilka praktycznych kodów, które mogą przydać się w realnych projektach.
Czym jest is_file?
is_file to funkcja w PHP, która pozwala sprawdzić, czy dany plik:
- Istnieje.
- Jest rzeczywiście plikiem, a nie np. katalogiem czy symbolicznym linkiem.
Zwraca wartość true, jeśli wskazany przez nas ścieżka odnosi się do pliku, oraz false, jeśli:
- Plik nie istnieje.
- Ścieżka prowadzi do katalogu lub innego elementu systemu plików.
Podstawowa składnia:
bool is_file ( string $filename )
Parametr:
$filename– pełna lub względna ścieżka do pliku, który chcemy sprawdzić.
Zwracana wartość:
true, jeśli wskazany plik istnieje i jest plikiem.falsew przeciwnym przypadku.
Kiedy warto używać is_file?
is_file przydaje się, gdy:
- Musisz upewnić się, że pracujesz na pliku, zanim spróbujesz go otworzyć, odczytać czy zmodyfikować.
- Chcesz odfiltrować pliki od katalogów w danym folderze.
- Tworzysz system zarządzania plikami i chcesz zminimalizować błędy (np. użytkownik próbuje operować na katalogu, ale aplikacja oczekuje pliku).
Przykłady użycia is_file
1. Sprawdzenie, czy plik istnieje
Najprostszy przykład to sprawdzenie, czy plik istnieje i jest plikiem.
<?php
$file = 'example.txt';
if (is_file($file)) {
echo "Plik '$file' istnieje i jest plikiem.";
} else {
echo "Plik '$file' nie istnieje lub nie jest plikiem.";
}
?>
Co się tutaj dzieje?
- Jeśli plik
example.txtistnieje w tym samym folderze co nasz skrypt, zobaczysz komunikat: Plik 'example.txt’ istnieje i jest plikiem. - W przeciwnym razie wyświetli się: Plik 'example.txt’ nie istnieje lub nie jest plikiem.
2. Filtrowanie plików w katalogu
Czasami mamy folder pełen plików i podkatalogów, a chcemy przepracować tylko pliki. Oto jak to zrobić:
<?php
$folder = './moje_pliki';
if (is_dir($folder)) {
$items = scandir($folder);
foreach ($items as $item) {
$fullPath = $folder . DIRECTORY_SEPARATOR . $item;
if (is_file($fullPath)) {
echo "Znaleziono plik: $item\n";
}
}
} else {
echo "Podana ścieżka '$folder' nie jest katalogiem.";
}
?>
Wyjaśnienie:
- Funkcja
scandirzwraca wszystkie elementy w folderze, w tym także.(bieżący katalog) i..(katalog nadrzędny). - Każdy element jest sprawdzany za pomocą
is_file. Jeśli to plik, jest wyświetlany. - Użycie
DIRECTORY_SEPARATORgwarantuje, że kod będzie działał zarówno na systemach Windows, jak i Linux.
3. Sprawdzanie pliku przed odczytem
Zawsze warto upewnić się, że plik istnieje, zanim zaczniemy go odczytywać.
<?php
$filename = 'config.json';
if (is_file($filename)) {
$content = file_get_contents($filename);
echo "Zawartość pliku:\n$content";
} else {
echo "Plik '$filename' nie istnieje lub nie jest plikiem.";
}
?>
Co robi ten kod?
- Sprawdza, czy
config.jsonjest faktycznym plikiem. - Jeśli tak, odczytuje jego zawartość za pomocą
file_get_contentsi wyświetla ją. - W przeciwnym razie wyświetla komunikat o błędzie.
4. Prosty skrypt do liczenia liczby plików w folderze
Wyobraź sobie, że masz folder i chcesz szybko policzyć, ile jest w nim plików. Możesz użyć poniższego kodu:
<?php
$folder = './dokumenty';
$fileCount = 0;
if (is_dir($folder)) {
$items = scandir($folder);
foreach ($items as $item) {
if (is_file($folder . DIRECTORY_SEPARATOR . $item)) {
$fileCount++;
}
}
echo "Liczba plików w folderze '$folder': $fileCount";
} else {
echo "Podana ścieżka '$folder' nie jest katalogiem.";
}
?>
Pułapki i dobre praktyki
1. Nie myl is_file z file_exists
file_existssprawdza, czy istnieje dowolny element systemu plików (plik, katalog, link symboliczny).is_filedodatkowo weryfikuje, czy jest to rzeczywiście plik.
2. Uważaj na uprawnienia
Nawet jeśli plik istnieje, funkcja is_file zwróci false, jeśli PHP nie ma wystarczających uprawnień, aby uzyskać dostęp do jego właściwości.
3. Pracuj z pełnymi ścieżkami
Zawsze, gdy to możliwe, używaj pełnych ścieżek do plików, aby uniknąć nieporozumień związanych z bieżącym katalogiem roboczym.
Funkcja is_file to prosty, ale potężny sposób na bezpieczną pracę z plikami w PHP. Dzięki niej możesz szybko zweryfikować, czy wskazana ścieżka prowadzi do pliku, co pozwala uniknąć wielu potencjalnych błędów w aplikacjach.
Jeśli dopiero zaczynasz przygodę z PHP i pracą z plikami, ćwicz na małych przykładach. Gdy poczujesz się pewnie, zacznij integrować te funkcje w swoich większych projektach. A jeśli coś pójdzie nie tak – pamiętaj, że każdy błąd to krok w stronę mistrzostwa!