PHP - Passwortschutz für den Download
Hiermit ist es möglich, Dateien mit einem individuellen Passwortschutz zu versehen. Es können beliebig viele Benutzer im Skript eingetragen werden, denen dann jeweils nur ein bestimmter Download zur Verfügung gestellt wird.
<?php
// Passwortschutz für den Download
// Namen, Passwörter und Download-Dateien eintragen
$personen = [
'Edwin Huber' => [
'passwort' => '123',
'download' => 'katalog.pdf'
],
'Werner Zenk' => [
'passwort' => '1234',
'download' => 'apfel.gif'
],
'Paul Meier' => [
'passwort' => '12345',
'download' => 'verzeichnis/archiv.zip'
],
'Thomas Müller' => [
'passwort' => '123456',
'download' => 'verzeichnis/datei.txt'
],
];
if (isset($_POST["name"])) {
// Name und Passwort überprüfen
if ($personen[$_POST["name"]]["passwort"] === $_POST["passwort"]) {
// Datei herunterladen
if (file_exists($personen[$_POST["name"]]["download"])) {
$mimetype = mime_content_type($personen[$_POST["name"]]["download"]);
header("Content-Type: " . $mimetype);
header("Content-Disposition: attachment; filename=" . basename($personen[$_POST["name"]]["download"]));
header("Content-Length: " . filesize($personen[$_POST["name"]]["download"]));
header("Content-Transfer-Encoding: binary");
header("Cache-Control: post-check=0, pre-check=0");
readfile($personen[$_POST["name"]]["download"]);
exit;
}
}
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Download</title>
</head>
<body>
<form method="post">
<label>Name : <input type="text" name="name" required="required"></label>
<label>Passwort : <input type="password" name="passwort" required="required"></label>
<input type="submit" value="Download">
</form>
</body>
</html>
✘ Beachten Sie, das der PHP-Code vor jeglicher Ausgabe an den Browser ausgeführt werden muss, das heißt ganz oben in der Datei!
Datums-abhängiger Download
<?php
// Passwortschutz für den Download und Datums-abhängiger Download
// Namen, Passwörter, Download-Dateien und Datum eintragen
$namen = [
'Edwin Huber' => [ // Name
'passwort' => '123', // Passwort
'download' => 'verzeichnis/datei1.php', // Pfad zur Datei
'datum' => '27.10.2019' // Datum bis zum ... (Format: TT.MM.JJJJ)
],
'Paul Meier' => [
'passwort' => '1234',
'download' => 'verzeichnis/datei2.zip',
'datum' => '04.07.2025'
],
'Thomas Müller' => [
'passwort' => '12345',
'download' => 'verzeichnis/datei3.pdf',
'datum' => '19.05.2018'
],
];
$ausgabe = '';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Name und Passwort überprüfen
if (isset($namen[$_POST["name"]]["passwort"]) && $namen[$_POST["name"]]["passwort"] === $_POST["passwort"]) {
$ausgabe = 'Die Anmeldung war erfolgreich.<br>';
// Datum überprüfen (Datum bis zum ...)
if (date("d.m.Y") <= $namen[$_POST["name"]]["datum"]) {
// Datei herunterladen
if (file_exists($namen[$_POST["name"]]["download"])) {
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=" . basename($namen[$_POST["name"]]["download"]));
header("Content-Length: " . filesize($namen[$_POST["name"]]["download"]));
header("Content-Transfer-Encoding: binary");
header("Cache-Control: post-check=0, pre-check=0");
readfile($namen[$_POST["name"]]["download"]);
}
else {
$ausgabe .= 'Die Angeforderte Datei wurde nicht gefunden!<br>';
}
}
else {
$ausgabe .= 'Die Datei konnte bis zum: ' . $namen[$_POST["name"]]["datum"] . ' heruntergeladen werden.<br>';
}
}
else {
$ausgabe .= 'Die Anmeldung war fehlerhaft!<br>';
}
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Download</title>
</head>
<body>
<form action="" method="post">
<label>Name : <input type="text" name="name" required="required"></label>
<label>Passwort : <input type="password" name="passwort" required="required"></label>
<input type="submit" value="Download">
</form>
<p><?=$ausgabe;?></p>
</body>
</html>
Tipp
Das Verzeichnis in dem die Download-Dateien liegen, sollte mit einer .htaccess
-Datei gesichert sein oder das Verzeichnis sollte
außerhalb des "Document Roots" liegen.
Alternative
Mit der HMTL5-Spezifikation können Sie das Download-Attribut zu einem beliebigen Tag hinzufügen, um den Download zu erzwingen.
<a href="afile.txt" download="filename.txt">Download</a>
Bausteine Alle Anzeigen
Eine zufällige Auswahl von Codeschnipseln
aus den Bereichen
HTML, CSS,
PHP, JavaScript und
MySQL.
<col> Tabellenspalten vordefinieren
CSS - Nur gefüllte Tabellenzellen hervorheben
PHP - Authentifizierung eines Benutzers mit PDO und password_verify()
JavaScript - Prüfen, ob die Funktion vor dem Aufruf vorhanden ist