У меня есть следующая функция, чтобы получить все изображения и видео в данном каталоге.Как можно видеть, я использую счетчик циклов для назначения уникального идентификатора каждому файлу.
Проблема в том, что счетчик будет меняться в зависимости от имени файла.
Например, zyxw.png
может быть $data[1]['name']
сегодня, но если завтра новый каталог abcd.png
будет добавлен в каталог, тогда он будет $data[1]['name']
, а zyxw.png
станет $data[2]['name']
, потому чтокаталог указан по имени файла.
Мне нужен способ присвоить уникальный идентификатор, который никогда не меняется.Единственный способ сделать это - назначить идентификатор на основе даты и времени создания файла.Я понимаю, что это может привести к коллизиям, если 2 файла имеют одинаковую дату / время создания файла, но я не могу придумать другого способа сделать это.
Итак, вопросы:
1:Есть ли лучший вариант назначить уникальный идентификатор?
2: Как бы я сделал это таким образом, чтобы каждый идентификатор был уникальным, а порядок идентификаторов не менялся по мере добавления файлов в каталог?
function getDirEnties($directory, &$results, $friend, $static_path) {
$i = 0;
$entries = scandir($directory);
foreach ($entries as $item) {
if (!in_array($item, ['.', '..']) && substr($item, 0, 1) !== '.') {
$path = $directory . '/' . $item;
$rel_path = $static_path . '/' . $item;
if (is_dir($path)) {
getDirEnties($path, $results, $friend, $rel_path);
} else {
$i++;
$pathInfo = pathinfo($path);
$name = $pathInfo['filename'];
$type = 'unknown';
if (!empty($pathInfo['extension'])) {
$name .= "." . $pathInfo['extension'];
switch (strtolower($pathInfo['extension'])) {
case "gif":
case "jpg":
case "png":
case "jpeg":
case "bmp":
//etc..
$type = 'image';
break;
case "mp4":
$type = 'video';
break;
}
}
$tttt = filemtime($path);
$data = [
'name' => $name,
'username' => $friend,
'time' => date('m/d/Y h:i:s a', $tttt),
'path' => $rel_path,
'type' => $type,
'id' => $i,
];
$results[] = $data;
}
}
}
if (isset($data)) {
return $data;
}
}