wenn mein freund der bei ionos ist ein verzeichnis download-limited erstellt und dort die scripte rein packt macht das script angeblich daraus download und nicht doenload-limited
ChatGPT:
Ah, ich verstehe, das ist ein klassisches Problem mit relativen Pfaden.
Wenn du z. B. im Browser https://example.com/download-limited/admin.php aufrufst, der Code aber __DIR__."/download.php" verwendet, erzeugt PHP die Links relativ zum aktuellen Script, also /download.php statt /download-limited/download.php. Deshalb sieht es so aus, als ob es den Ordner „download“ statt „download-limited“ verwendet.
Lösung:
Verwende absolute Pfade für die Links:
In admin.php beim Link zum Download:
<a href="<?= $_SERVER['SCRIPT_NAME'] ?>/download.php?token=<?= $tk ?>" target="_blank">
oder noch besser:
<a href="<?= dirname($_SERVER['SCRIPT_NAME']) ?>/download.php?token=<?= $tk ?>" target="_blank">
dirname($_SERVER['SCRIPT_NAME']) sorgt dafür, dass immer der aktuelle Ordner (z. B. download-limited) benutzt wird.
Alle anderen internen Links anpassen:
Jede Stelle, die bisher nur download.php?token=... hatte, muss so angepasst werden:
<a href="<?= dirname($_SERVER['SCRIPT_NAME']) ?>/download.php?token=<?= $tk ?>">
Damit ist egal, ob das Script in /www/download-limited oder direkt /www liegt – es greift immer korrekt auf den Unterordner zu.
Serverseitige Pfade ($protectedDir, $storageFile) bleiben gleich, die betreffen nur PHP-Dateisystemzugriffe, nicht die URLs.
Zeitlich begrenzter Zugang zu einem Download
Re: Zeitlich begrenzter Zugang zu einem Download
Ich hab mal Chat GPT gefragt :
Gruß Volker
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
> Klicke ich im Admin-Bereich unten auf den Button "Öffnen" wird das korrekte Verzeichnis angezeigt.
> Klicke ich auf den Button "Kopieren" (daneben) wird in beiden Fällen ein falscher Link erstellt.
> Klicke ich auf den Button "Kopieren" (daneben) wird in beiden Fällen ein falscher Link erstellt.
Re: Zeitlich begrenzter Zugang zu einem Download
tausch mal die admin.php mit diesem code hier:
Hat Chat GPT gerade für mich geändert
Code: Alles auswählen
<?php
$adminUser = "admin";
$adminPass = "geheim";
session_start();
// Login prüfen
if (!isset($_SESSION['admin'])) {
if (isset($_POST['user'], $_POST['pass'])) {
if ($_POST['user'] === $adminUser && $_POST['pass'] === $adminPass) {
$_SESSION['admin'] = true;
header("Location: admin.php");
exit;
} else {
$error = "❌ Falsche Zugangsdaten";
}
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Admin Login</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="bg-light d-flex align-items-center justify-content-center vh-100">
<div class="card shadow p-4" style="max-width:400px;width:100%;">
<h3 class="mb-3 text-center">🔑 Admin Login</h3>
<?php if(isset($error)) echo "<div class='alert alert-danger'>$error</div>"; ?>
<form method="post">
<div class="mb-3"><label class="form-label">Benutzer</label><input type="text" name="user" class="form-control" required></div>
<div class="mb-3"><label class="form-label">Passwort</label><input type="password" name="pass" class="form-control" required></div>
<button type="submit" class="btn btn-primary w-100">Login</button>
</form>
</div></body></html>
<?php exit;
}
// Pfade & Variablen
$storageFile = __DIR__."/tokens.json";
$protectedDir = __DIR__."/schutz";
$blacklist = ['.htaccess', '.gitignore'];
$tokens = file_exists($storageFile) ? json_decode(file_get_contents($storageFile), true) : [];
$message="";
// Token erstellen (nur bei POST und Create)
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['create'])){
$files = $_POST['files'] ?? [];
$hours = intval($_POST['hours']);
$maxDownloads = intval($_POST['maxDownloads'] ?? 1);
if(!empty($files) && $hours>0 && $maxDownloads>0){
$token = bin2hex(random_bytes(16));
$expires = time() + ($hours * 3600);
$downloads = [];
foreach($files as $f) $downloads[$f] = 0;
$tokens[$token] = [
"files" => $files,
"expires" => $expires,
"downloads" => $downloads,
"maxDownloads" => $maxDownloads
];
file_put_contents($storageFile, json_encode($tokens), LOCK_EX);
// Nachricht vorbereiten, kein Redirect -> kein doppelter Token
$message = "<div class='alert alert-success'>✅ Token erstellt!</div>";
} else {
$message = "<div class='alert alert-warning'>⚠️ Bitte mindestens eine Datei und gültige Zeit angeben!</div>";
}
}
// Token löschen
if(isset($_GET['delete'])){
unset($tokens[$_GET['delete']]);
file_put_contents($storageFile,json_encode($tokens));
$message="<div class='alert alert-info'>🗑️ Token gelöscht</div>";
}
// Funktion: Token-Link dynamisch
function tokenLink($tk){
$dir = dirname($_SERVER['SCRIPT_NAME']); // aktueller Ordner
return $dir . "/download.php?token=$tk";
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Token Verwaltung</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
/* Accordion Stil für Ordner */
.folder { cursor:pointer; }
.subfolder { margin-left:20px; display:none; }
</style>
</head>
<body class="bg-light">
<div class="container py-4">
<div class="d-flex justify-content-between align-items-center mb-4">
<h2>🔐 Token-Verwaltung</h2>
<a href="?logout=1" class="btn btn-outline-danger">🚪 Logout</a>
</div>
<?= $message ?>
<!-- Token erstellen -->
<div class="card shadow mb-4"><div class="card-body">
<h4 class="card-title">Neuen Token erstellen</h4>
<form method="post">
<div class="mb-3">
<label class="form-label">Gültigkeit (Stunden)</label>
<input type="number" name="hours" value="24" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label">Max Downloads pro Datei</label>
<input type="number" name="maxDownloads" value="5" class="form-control" required>
</div>
<div class="mb-3"><label class="form-label">Dateien auswählen</label><br>
<?php
// Ordner rekursiv anzeigen
function listFiles($dir, $prefix=""){
global $blacklist;
$items = array_diff(scandir($dir),['.','..']);
foreach($items as $item){
$full = "$dir/$item";
$id = uniqid("f_");
if(is_dir($full)){
echo "<div class='folder' onclick=\"toggleFolder('$id')\">📁 ".htmlspecialchars($prefix.$item)."</div>";
echo "<div class='subfolder' id='$id'>";
listFiles($full, $prefix.$item."/"); // rekursiv
echo "</div>";
} else {
if(in_array($item,$blacklist)) continue;
echo "<div class='form-check'><input class='form-check-input' type='checkbox' name='files[]' value='".htmlspecialchars($prefix.$item)."' id='$id'>
<label class='form-check-label' for='$id'>".htmlspecialchars($prefix.$item)."</label></div>";
}
}
}
listFiles($protectedDir);
?>
</div>
<button type="submit" name="create" class="btn btn-success">Token erstellen</button>
</form>
</div></div>
<!-- Bestehende Tokens -->
<div class="card shadow"><div class="card-body">
<h4 class="card-title">Bestehende Tokens</h4>
<?php if(empty($tokens)){ echo "<p class='text-muted'>Keine Tokens vorhanden.</p>"; } else { ?>
<div class="table-responsive"><table class="table table-striped table-bordered align-middle">
<thead class="table-light"><tr>
<th>Token</th><th>Dateien</th><th>Downloads</th><th>Ablauf</th><th>Link</th><th>Aktion</th>
</tr></thead>
<tbody>
<?php foreach($tokens as $tk=>$entry){ ?>
<tr>
<td><code><?= substr($tk,0,10) ?>...</code></td>
<td><?= implode(", ", $entry['files']) ?></td>
<td>
<?php
$dl = [];
foreach($entry['files'] as $f){
$count = $entry['downloads'][$f] ?? 0;
$max = $entry['maxDownloads'] ?? 5;
$dl[] = htmlspecialchars($f)." ($count/$max)";
}
echo implode("<br>", $dl);
?>
</td>
<td><?= date("d.m.Y H:i",$entry['expires']) ?></td>
<td>
<div class="d-flex gap-2">
<a href="<?= tokenLink($tk) ?>" target="_blank" class="btn btn-sm btn-primary">🔗 Öffnen</a>
<button class="btn btn-sm btn-secondary" onclick="copyLink('<?= $tk ?>')">📋 Kopieren</button>
</div>
</td>
<td><a href="?delete=<?= $tk ?>" class="btn btn-sm btn-danger" onclick="return confirm('Token wirklich löschen?');">❌ Löschen</a></td>
</tr>
<?php } ?>
</tbody></table></div><?php } ?>
</div></div>
</div>
<script>
function copyLink(token){
const link = `${window.location.origin}${'<?= dirname($_SERVER['SCRIPT_NAME']) ?>'}/download.php?token=${token}`;
navigator.clipboard.writeText(link).then(()=>{ alert('Link kopiert: '+link); }).catch(err=>{ alert('Fehler beim Kopieren: '+err); });
}
function toggleFolder(id){
const el = document.getElementById(id);
if(el.style.display==="none" || el.style.display==="") el.style.display="block";
else el.style.display="none";
}
</script>
<?php
if(isset($_GET['logout'])){ session_destroy(); header("Location: admin.php"); exit; }
?>
</body></html>
Gruß Volker
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
geht 
... - auch in dem alten Verzeichnis "save" geht es jetzt, das ich soeben aber gelöscht habe.
https://www.mobirise-tutorials.com/down ... 81590f7e87
Wie gut dass Du eine Tester hast


... - auch in dem alten Verzeichnis "save" geht es jetzt, das ich soeben aber gelöscht habe.
https://www.mobirise-tutorials.com/down ... 81590f7e87
Code: Alles auswählen
https://www.mobirise-tutorials.com/download-limited/download.php?token=bc9f5e08ba1d18fe5c391681590f7e87



- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
Schreibe dann bitte auch noch eine verständliche readme.txt und gib Bescheid, wenn und wo das neue Download liegt.
Ich werde das morgen als Tutorial mit einbauen...
Ich werde das morgen als Tutorial mit einbauen...
Re: Zeitlich begrenzter Zugang zu einem Download
Ich hab den Fehler gefunden
War mein Fehler
Hier das komplette ZIP: https://www.niederastroth.de/schutz.7z

War mein Fehler

Hier das komplette ZIP: https://www.niederastroth.de/schutz.7z
Gruß Volker
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
… noch ein neuer Fehler:
X Datei nicht freigegeben
https://www.mobirise-tutorials.com/down ... 6fecbf48da
Ich habe noch Unterordner angelegt:
X Datei nicht freigegeben
https://www.mobirise-tutorials.com/down ... 6fecbf48da
Code: Alles auswählen
https://www.mobirise-tutorials.com/download-limited/download.php?token=d677a33f403ff49700ba056fecbf48da
Ich habe noch Unterordner angelegt:
Re: Zeitlich begrenzter Zugang zu einem Download
Man darf der KI nicht blind vertrauen
Die hat auch Fehler eingebaut und mir das Bootstrap geklaut
Ich habe es jetzt ausgiebig getetstet und für gut befunden : https://www.niederastroth.de/schutz.7z

Die hat auch Fehler eingebaut und mir das Bootstrap geklaut

Ich habe es jetzt ausgiebig getetstet und für gut befunden : https://www.niederastroth.de/schutz.7z
Gruß Volker
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
Ich gucke gleich nochmals …
Du musst der KI immer explizit mitteilen, dass sie das Skript überprüfen soll und Änderungen kommentieren muss. Sie soll nur Änderungen zu dem Fehler vornehmen und ansonsten keinerlei Änderungen am Skript vornehmen. Diese Anweisungen sind inzwischen Standard bei mir.
Du musst der KI immer explizit mitteilen, dass sie das Skript überprüfen soll und Änderungen kommentieren muss. Sie soll nur Änderungen zu dem Fehler vornehmen und ansonsten keinerlei Änderungen am Skript vornehmen. Diese Anweisungen sind inzwischen Standard bei mir.
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
Ich würde die Verzeichnisse "test1" und "test" aus dem Verzeichnis "schutz" noch für den Download entfernen. Kein Mensch wird diese so nennen.
Dann enthält Dein derzeitiges Download auch ein Token, der sollte nicht dabei sein.
Das schließende </html> Tag sitzt komisch neben dem </body> Tag in der Datei "admin.php".
Eine ausführliche und verständliche Datei "readme.txt" fehlt noch.
Der Fehler ist aber noch immer da. Die freigegebenen Dateien können nicht herunter geladen werden. Das kann doch nur an dem neuen Pfad liegen oder?!
https://www.mobirise-tutorials.com/down ... 3be9adca75
Ich muss leider für heute Schluss machen und gucke dann morgen früh wieder. Bis denne ...
Dann enthält Dein derzeitiges Download auch ein Token, der sollte nicht dabei sein.
Das schließende </html> Tag sitzt komisch neben dem </body> Tag in der Datei "admin.php".
Eine ausführliche und verständliche Datei "readme.txt" fehlt noch.
Der Fehler ist aber noch immer da. Die freigegebenen Dateien können nicht herunter geladen werden. Das kann doch nur an dem neuen Pfad liegen oder?!
https://www.mobirise-tutorials.com/down ... 3be9adca75
Code: Alles auswählen
https://www.mobirise-tutorials.com/download-limited/download.php?token=3cc47cb33e586989fff0aa3be9adca75
Ich muss leider für heute Schluss machen und gucke dann morgen früh wieder. Bis denne ...
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
Als ZIP Archiv lassen sie sich downloaden - aber nicht einzeln.
Alles auch korrekt im ZIP in den richtigen Ordnern und Unterordnern
Da ist nur noch ein Fehler im Download der einzelnen Dateien.
Alles auch korrekt im ZIP in den richtigen Ordnern und Unterordnern


Da ist nur noch ein Fehler im Download der einzelnen Dateien.
Re: Zeitlich begrenzter Zugang zu einem Download
So, nun ist aber alles wieder OK.
Ich habe die Ordner ordner1 und ordner2 genannt, das werde ich dann in der readme.txt erklären was es damit ausf sich hat
jetzt erstmal für dich zum testen Tommy: https://www.niederastroth.de/schutz.7z
Ich habe die Ordner ordner1 und ordner2 genannt, das werde ich dann in der readme.txt erklären was es damit ausf sich hat

jetzt erstmal für dich zum testen Tommy: https://www.niederastroth.de/schutz.7z
Gruß Volker
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
Funktioniert alles einwandfrei 
https://www.mobirise-tutorials.com/down ... 01b4d04214
Einzeln und auch als ZIP mit allen Ordnern.


https://www.mobirise-tutorials.com/down ... 01b4d04214
Code: Alles auswählen
https://www.mobirise-tutorials.com/download-limited/download.php?token=f64688908c79e93df4ad7801b4d04214

Re: Zeitlich begrenzter Zugang zu einem Download
Na wenigstens einer der es auch brauchen kann
Readme ist nun auch im zip

Readme ist nun auch im zip
Gruß Volker
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
Das werden viele brauchen können - ganz sicher 

Re: Zeitlich begrenzter Zugang zu einem Download
Tommy,
mein Problem bei chat gpt ist, das ich da nicht lange mit der Tante sprechen / schreiben kann, weil mein Limmit immer sehr schnell voll ist.
Ich hatte der nur die admin hoch geladen mit der bitte die fehler zu beseitigen. Dann habe ich einfach - ohne zu prüfen- den code an dich weiter gegeben.
Ich werde noch ein ausführliche Video dazu machen heute oder morgen
mein Problem bei chat gpt ist, das ich da nicht lange mit der Tante sprechen / schreiben kann, weil mein Limmit immer sehr schnell voll ist.
Ich hatte der nur die admin hoch geladen mit der bitte die fehler zu beseitigen. Dann habe ich einfach - ohne zu prüfen- den code an dich weiter gegeben.
Ich werde noch ein ausführliche Video dazu machen heute oder morgen
Gruß Volker
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
Bin gleich weg, gerade nur am Handy.
ChatGPT finde ich derart genial, dass ich bereits seit 6 Monaten die 23,00 Euro/Monat zahle. Dann erhält man sehr viel bessere Antworten, schnell und fast unbegrenzt und immer mit der aktuell besten Version, im Moment v5.o.
Das kann man auch monatlich wieder kündigen, wenn mal nicht so viel geplant ist.
ChatGPT finde ich derart genial, dass ich bereits seit 6 Monaten die 23,00 Euro/Monat zahle. Dann erhält man sehr viel bessere Antworten, schnell und fast unbegrenzt und immer mit der aktuell besten Version, im Moment v5.o.
Das kann man auch monatlich wieder kündigen, wenn mal nicht so viel geplant ist.
Re: Zeitlich begrenzter Zugang zu einem Download
Ja verdammtTommy Herrmann hat geschrieben: Sa 6. Sep 2025, 18:40 Bin gleich weg, gerade nur am Handy.
ChatGPT finde ich derart genial, dass ich bereits seit 6 Monaten die 23,00 Euro/Monat zahle. Dann erhält man sehr viel bessere Antworten, schnell und fast unbegrenzt und immer mit der aktuell besten Version, im Moment v5.o.
Das kann man auch monatlich wieder kündigen, wenn mal nicht so viel geplant ist.

Warum hast du die Tante nicht mal so ein script schreiben lassen

Ich hab da kein Geld für

Gruß Volker
- Tommy Herrmann
- Site Admin
- Beiträge: 7752
- Registriert: So 6. Dez 2020, 07:37
- Wohnort: Berlin
- Kontaktdaten:
Re: Zeitlich begrenzter Zugang zu einem Download
Habe ich ja schon ganze viele. Die haben fast immer auch gleich funktioniert.
Zwischen der bezahlten und der freien Version liegen, wie ich finde, Welten.
Kannst das doch mal einen Monat testen und dann einen Tag vor der automatischen Erweiterung kündigen. Hatte ich eigentlich auch vor
Zwischen der bezahlten und der freien Version liegen, wie ich finde, Welten.
Kannst das doch mal einen Monat testen und dann einen Tag vor der automatischen Erweiterung kündigen. Hatte ich eigentlich auch vor

Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste