Propozycja,
Podzieliłbym na kolumny np. tak:
id |
id_user |
server_name |
file_name |
ext |
date |
1 |
u828 |
fs-001 |
ad235ser676734 |
jpg |
2021-07-09 |
2 |
u828 |
fs-003 |
dd349qwn99991 |
png |
2021-07-10 |
i później np. w php-ie połączyć te dane w ścieżkę
(nazwa obrazka - ad235ser676734 - wygenerowana w czasie upload-u)
<img src="image.php?uid=u828.ad235ser676734">
np. image.php
<?php
session_start();
if (Czy user jest zalogowany np. $_SESSION('logged_user_id')) {
if (!empty($_GET['uid'])) {
list($id_user, $file_name) = explode('.', $_GET['uid']);
// sprawdzenie danych
// np. u 828 - id_user to 1 mała litera i 3 cyfry
$id_user = (preg_match("/^[a-z][0-9]{3}/", $id_user)) ? $id_user : null;
// np. ad 235 ser 676734 - file_name to 2 małe litery, 3 cyfry, 3 małe litery i do końca cyfry nie mniej jak 5 cyfr i więcej
$file_name = (preg_match("/^[a-z].[0-9]..[a-z]..[0-9]{5,}/", $file_name)) ? $file_name : null;
if (($id_user && $file_name) && $_SESSION('logged_user_id') == $id_user) {
define('PATH_TO_USERS_FILE','users/{{id_user}}/uploaded/');
// tu połaczenie z bazą danych
// przykładowy $sql = "SELECT server_name, ext FROM uploaded_users_files WHERE id_user = '$id_user' AND file_name = '$file_name'";
if (SQL zwrócił wartość poprawnie) {
$server_name = $row['server_name']; // np. 'fs-001';
$ext = $row['ext']; // np. 'jpg';
$full_path = "https://xxx.pl/$server_name/"
. str_replace('{{id_user}}', $id_user, PATH_TO_USERS_FILE) . "$file_name.$ext";
$fp = fopen($full_path, 'rb');
header("Content-Type: image/{$ext}");
fpassthru($fp);
exit;
}
}
}
}
?>
można też zostawić samą nazwę obrazka, a id_user pobierać z sesji.
<img src="image.php?uid=ad235ser676734">
i odpowiednio dopasować image.php.