Как заставить file_get_contents возвращать уникальный результат

Я новичок в php и хотел бы попросить вас о помощи, возвращая уникальный результат из file_get_contents(). Причина в том, что я хочу дать каждой фотографии уникальное имя, чтобы позже можно было удалить только одну из них, а не все.

$file =addslashes(file_get_contents($_FILES['image']['tmp_name'][$key]));

К сожалению, time() и microtime() не помогают в этой ситуации.

2 ответа

Почему бы просто не сгенерировать SHA-1 контента и использовать его в качестве имени файла (вроде как git хранит объекты в свободной базе данных репозитория)? Я обычно не люблю вставлять капли в RDBMS; это немного неуклюже, и вы должны убедиться, что в поле blob достаточно места для тех размеров файлов, с которыми вы ожидаете работать. Кроме того, файловая система оптимизирована для работы с файлами. Поэтому имеет смысл хранить специальный каталог на сервере, к которому веб-сервер имеет доступ для записи. Затем вы записываете туда файлы и сохраняете ссылки на них в базе данных. Вот пример:

// Read the contents of the file and create a SHA-1 hash signature.
$tmpPath = $_FILES['image']['tmp_name'];
$blob = file_get_contents($tmpPath);
$name = sha1($blob) . '.img'; // e.g. b99c6e26c3775fca9918ad614b7be7fe4fd7bee3.img

// Save the file to your server somewhere.
$dstPath = "/path/to/imgdb/$name";
move_uploaded_file($tmpPath,$dstPath);

// TODO: insert reference (i.e. $name) into database somehow...

И да, исследования сломали SHA-1, но вы могли бы легко написать некоторые меры предосторожности против этого, если вы достаточно параноидальны (например, проверьте существующую загрузку с тем же хешем; содержание отличается, просто измените / добавьте к имени мало что поменять). Вы не идентифицируете изображение на серверной части по его содержанию: вам просто нужно уникальное имя. Получив это, вы просто ищите его в БД, чтобы определить путь к файлу на диске, соответствующий фактическим данным изображения.

Если вы ожидаете, что файлы изображений будут довольно большими, вы можете ограничить объем чтения в память, используя 4-й параметр: file_get_contents(),

Может быть, это поможет вам: http://php.net/manual/en/function.uniqid.php

uniqid ();

$ imageName = $ imageName. '_'. uniqid ();

Другие вопросы по тегам