Я бы назвал UUID для изображений и создал бы подпапки на основе имен файлов. Вы можете сделать это довольно легко с помощью chunk_split
. Например, если вы создаете папку каждые 4 символа, вы получите такую структуру:
img/upload_docs/1/1324/0260/61_1.txt
img/upload_docs/1/1324/0260/56_1.txt
Сохраняя имя изображения 1324026056_1.txt, вы можете очень легко определить, где оно принадлежит или где его получить, используя chunk_split
.
Этот метод аналогичен тому, как git хранит объекты.
Как код, это может выглядеть примерно так.
// pass filename ('123456789.txt' from db)
function get_path_from_filename($filename) {
$path = 'img/upload_docs';
list($filename, $ext) = explode('.', $filename); //remove extension
$folders = chunk_split($filename, 4, '/'); // becomes 1234/5678/9
// now we store it here
$newpath = $path.'/'.$folders.'/'.$ext;
return $newpath;
}
Теперь, когда вы ищете файл, чтобы доставить его пользователю, используйте функцию, используя эти шаги, чтобы воссоздать, где находится файл (на основе имени файла, которое все еще сохраняется как «123456789.txt» в БД). 1015 *
Теперь, чтобы доставить или сохранить файл, используйте get_path_from_filename
.