Hallo Community,
ich stehe vor folgendem Problem:
Ich möchte einen geschützten Bereich für Mitglieder haben, in dem jeder Dateien hochladen darf in sein eigenes Home-Verzeichnis. Funktioniert auch prima mit dem bestehenden Formulargenerator. Registrierung und Login schützen auch diese Seiten. Ebenfalls prima. Nach dem Login soll jeder seine eigenen Dateien anschauen und herunterladen können. Grob sieht das ungefähr so aus:
Das Skript dazu:
PHP-Code:
$FrontendUserObject = FrontendUser::getInstance();
// Member has home folder
if ( $FrontendUserObject->assignDir == '1') {
$homeFolderObj = FilesModel::findByPk($FrontendUserObject->homeDir);
$pathToHomeFolder = $homeFolderObj->path;
// Edit
$files = array_diff(scandir($pathToHomeFolder), array('.', '..'));
echo 'Hochgeladene Dateien:<br/>';
foreach ($files as $file) {
$filepath = $pathToHomeFolder . '/' . $file;
echo '<a href="' . $filepath . '" target="_blank">' . $file . '</a><br/>';
echo '<a href="' . $filepath . '" target="_blank">' . 'Ansehen ' . '</a>';
echo '<a href="' . $filepath . '" download>' . 'Herunterladen ' . '</a>';
echo '<a class="delete" href="' . $pathToHomeFolder . '/' . $file . '" target="_blank">' . ' Löschen' . '</a><br/><br/>';
}
}
Aber folgender Haken bei der Sache:
Es sind teilweise sensible Dateien hochgeladen, die unbedingt geschützt werden müssen. Das heißt, mit dem direkten Link auf z.B. eine Bilddatei im Home-Verzeichnis kann aber jeder darauf zugreifen. Schütze ich diesen Ordner im Backend in der Dateiverwaltung, funktioniert aber mein Skript nicht mehr.
Code:
Warning: scandir(files/kunden/beispielkunde): failed to open dir: No such file or directory in /var/www/vhosts/xxx/httpdocs/xxx/templates/xxx/homedir.php on line 11
Warning: scandir(): (errno 2): No such file or directory in /var/www/vhosts/xxx/httpdocs/xxx/templates/xxx/homedir.php on line 11
Warning: array_diff(): Argument #1 is not an array in /var/www/vhosts/xxx/httpdocs/xxx/templates/xxx/homedir.php on line 11
Hochgeladene Dateien:
Warning: Invalid argument supplied for foreach() in /var/www/vhosts/xxx/httpdocs/xxx/templates/xxx/homedir.php on line 15
Entweder muss ich also mein Skript umschreiben, sodass geschützte Ordner trotzdem angezeigt werden können- oder ich muss die Dateien anders schützen. Wichtig ist nur, dass man sich per Nutzername und Passwort, welches von Contao zugewiesen wurde, authentifizieren muss. (Logischerweise alles möglichst automatisch, damit die Pflege möglichst leicht bleibt)
MfG,
Deniz
Contao 4.4.8
PHP 7.0.26