Listowanie plików w katalogu (strona pobierania)
- Pliki i obrazy
- poziom: początkujący
- aktualizacja: 12 lipca 2026
Sekcja „Pliki do pobrania" — cenniki, regulaminy, formularze PDF — nie potrzebuje bazy danych. Wystarczy katalog na serwerze i ten skrypt: sam wykryje pliki, pokaże ich rozmiar w ludzkim formacie i datę aktualizacji. Dodanie nowego pliku to po prostu wgranie go przez FTP.
<?php
/**
* Listowanie plików w katalogu — skryptyPHP.com
* Zapisz jako: do-pobrania.php
*/
// ── USTAWIENIA ──────────────────────────────────────────────
// Katalog z plikami — podkatalog obok tego skryptu.
// NIGDY nie bierz ścieżki katalogu z $_GET — to otwiera dostęp
// do wszystkich plików na serwerze!
$katalog = __DIR__ . '/do-pobrania';
$katalog_www = 'do-pobrania'; // ta sama lokalizacja jako adres URL
// Pliki o tych rozszerzeniach pokażemy na liście
$pokazuj = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'zip', 'jpg', 'png', 'txt'];
/** Rozmiar pliku w czytelnej postaci: 15,3 KB, 2,1 MB itd. */
function rozmiar_czytelny(int $bajty): string
{
$jednostki = ['B', 'KB', 'MB', 'GB'];
$i = 0;
$rozmiar = (float) $bajty;
while ($rozmiar >= 1024 && $i < count($jednostki) - 1) {
$rozmiar /= 1024;
$i++;
}
return number_format($rozmiar, $i === 0 ? 0 : 1, ',', ' ')
. ' ' . $jednostki[$i];
}
// ── ZEBRANIE LISTY PLIKÓW ───────────────────────────────────
$pliki = [];
if (is_dir($katalog)) {
foreach (new DirectoryIterator($katalog) as $element) {
if (!$element->isFile()) {
continue;
}
$rozszerzenie = strtolower($element->getExtension());
if (!in_array($rozszerzenie, $pokazuj, true)) {
continue;
}
$pliki[] = [
'nazwa' => $element->getFilename(),
'rozszerzenie' => $rozszerzenie,
'rozmiar' => $element->getSize(),
'zmieniono' => $element->getMTime(),
];
}
}
// Sortowanie: najnowsze na górze (zamień na 'nazwa', jeśli wolisz alfabetycznie)
usort($pliki, fn(array $a, array $b): int => $b['zmieniono'] <=> $a['zmieniono']);
?>
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pliki do pobrania</title>
<style>
body { font-family: sans-serif; max-width: 720px; margin: 20px auto; }
table { border-collapse: collapse; width: 100%; }
th, td { border-bottom: 1px solid #ddd; padding: 10px 8px; text-align: left; }
th { background: #f5f5f5; }
.typ { display: inline-block; padding: 2px 8px; border-radius: 4px;
background: #eee; font-size: 12px; text-transform: uppercase; }
</style>
</head>
<body>
<h1>Pliki do pobrania</h1>
<?php if (!$pliki): ?>
<p>Brak plików do pobrania.</p>
<?php else: ?>
<table>
<tr><th>Plik</th><th>Typ</th><th>Rozmiar</th><th>Aktualizacja</th></tr>
<?php foreach ($pliki as $p): ?>
<tr>
<td>
<a href="<?= htmlspecialchars($katalog_www) ?>/<?= rawurlencode($p['nazwa']) ?>" download>
<?= htmlspecialchars($p['nazwa']) ?>
</a>
</td>
<td><span class="typ"><?= htmlspecialchars($p['rozszerzenie']) ?></span></td>
<td><?= rozmiar_czytelny($p['rozmiar']) ?></td>
<td><?= date('d.m.Y', $p['zmieniono']) ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
</body>
</html>
Jak użyć tego skryptu
- Utwórz obok skryptu katalog
do-pobrania/i wgraj do niego pliki (FTP lub menedżer plików hostingu). - Zapisz kod jako
do-pobrania.phpi otwórz w przeglądarce — lista zbuduje się sama. - Listę widocznych rozszerzeń zmienisz w tablicy
$pokazuj, a sortowanie w wywołaniuusort().
Warto wiedzieć
- Ścieżka katalogu jest na sztywno w kodzie — i tak ma zostać. Pobieranie ścieżki z adresu URL (
?katalog=...) to klasyczna dziura typu path traversal. - Nazwy plików w linkach przechodzą przez
rawurlencode(), a wyświetlane — przezhtmlspecialchars(); spacje i polskie znaki w nazwach nie zepsują strony. - Atrybut
downloadw linku podpowiada przeglądarce pobieranie zamiast otwierania — działa dla plików z tej samej domeny. - Jeśli w katalogu wylądują pliki, których nie chcesz listować, po prostu usuń ich rozszerzenie z tablicy
$pokazuj.
Podobne skrypty
Bezpieczny upload plików na serwer
Wgrywanie plików z pełnym pakietem zabezpieczeń: biała lista rozszerzeń, kontrola prawdziwego typu MIME (finfo), limit rozmiaru, losowa nazwa pliku i czytelne komunikaty błędów.
średni Zobacz kod → Pliki i obrazyTworzenie miniatur obrazków (GD)
Funkcja generująca miniatury JPEG, PNG i WebP z zachowaniem proporcji i przezroczystości, plus przykład przetworzenia całego katalogu zdjęć naraz.
średni Zobacz kod → Pliki i obrazyEksport danych do pliku CSV (zgodny z Excelem)
Generowanie pliku CSV do pobrania wprost z tablicy PHP lub zapytania SQL — ze znacznikiem BOM i średnikami, dzięki czemu polski Excel otwiera plik bez krzaczków.
początkujący Zobacz kod →