Генерация основанного на времени уникального имени файла для загрузок, не создавая состояние состязания

Необходимо создать индекс, который сократит количество возможных строк, возвращенных как можно быстрее.

Поэтому самый простой индекс для создания был бы на столбце k4, как это может иметь к самому большому количеству различных значений. Только необходимо индексировать первоначальную подстроку k4, где математические ожидания k4 отличаются в рамках той подстроки. Это уменьшит размер индекса и ускорит доступ.

k7 должен также быть индексирован, поскольку это значительно увеличит скорость orderby пункта.

Вы, возможно, также должны экспериментировать (я знаю, я знаю, Вы сказали, не экспериментируют, но это может помочь...) с созданием нескольких индекс столбца в этом порядке: k4, k1, k2, k3. Это, снова, должно сократить количество возможных строк, возвращенных как можно быстрее.

5
задан mrpatg 20 January 2012 в 16:34
поделиться

5 ответов

Насколько мне известно, это отличный способ назвать файлы, хотя я бы проверил file_exists () и, возможно, добавил случайное число.

Вам нужно сохранить это имя файла в переменной и ссылаться на нее позже, вместо того, чтобы каждый раз полагаться на алгоритм. Это может быть сохранено в пользовательском $ _ SESSION , файле cookie, переменной GET и т. Д. Между загрузками страницы.

Надеюсь, что это поможет

5
ответ дан 13 December 2019 в 22:12
поделиться

Я бы рекомендовал сохранить имя файла в сеансе (согласно AI). Если вы сохраните его в одной из других переменных, более вероятно, что конечный пользователь сможет атаковать систему через нее. MD5 пользователя, объединенного с rand (), был бы хорошим способом получить длинный список уникальных значений. Простое использование rand (), вероятно, приведет к более высокому проценту конфликтов.

Я не уверен насчет процесса, который вы выполняете для загрузки файлов, но другой способ обработки загрузки файлов - это встроенные обработчики PHP. Вы можете загрузить файл, а затем использовать «безопасные» методы для извлечения загруженных файлов из временного пространства. (временное пространство в этом случае может быть безопасно расположено за пределами директивы open base dir, чтобы предотвратить вмешательство). is_uploaded_file () и move_uploaded_file () из: http: // php. net / manual / en / features.file-upload.post-method.php Пример 2 может решить проблему, с которой вы столкнулись.

Обязательно проверьте наличие файла в этом месте, если вы выбираете имя файла в летать. Если пользовательский ввод разрешен в любой форме или форме, проверьте и отфильтруйте аргумент, чтобы убедиться, что он безопасен. Кроме того, если папка хранилища доступна через Интернет, убедитесь, что вы изменили имя и, возможно, расширение. Вы же не хотите, чтобы кто-то мог загружать код, а затем выполнять его. Это официально ведет к ПЛОХОЙ деятельности.

проверить и отфильтровать аргумент, чтобы убедиться, что он безопасен. Кроме того, если папка хранилища доступна через Интернет, убедитесь, что вы изменили имя и, возможно, расширение. Вы же не хотите, чтобы кто-то мог загружать код, а затем выполнять его. Это официально ведет к ПЛОХОЙ деятельности.

проверить и отфильтровать аргумент, чтобы убедиться, что он безопасен. Кроме того, если папка хранилища доступна через Интернет, убедитесь, что вы изменили имя и, возможно, расширение. Вы же не хотите, чтобы кто-то мог загрузить код, а затем выполнить его. Это официально ведет к ПЛОХОЙ деятельности.

2
ответ дан 13 December 2019 в 22:12
поделиться

Просто хочу добавить, что в php есть функция для создания идентификаторов: uniqid . Вы также можете указать перед идентификатором строку (например, дату?).

Всегда проверяйте ввод данных пользователем и заголовки сервера!

2
ответ дан 13 December 2019 в 22:12
поделиться

Почему бы не использовать

$filename = md5(rand());

Это будет в значительной степени уникальным в каждом случае. И если вы обнаружите, что $ filename уже существует, вы можете просто вызвать его снова.

0
ответ дан 13 December 2019 в 22:12
поделиться

Не рекомендуется использовать ID, зависящий от времени - если вы загружаете два изображения одновременно, последнее может перезаписать более раннее. Вам следует посмотреть на такую ​​функцию, как uniqid () . Однако, если этот сценарий загрузки / изменения размера / сохранения предназначен для «однопользовательского» режима, то это не такая уж большая проблема.

К самой проблеме. На вашем месте я бы просто сохранил вычисленное имя файла в некоторой переменной и использовал бы переменную с этой точки. Уже вычисленные вычисления - пустая трата времени. А при загрузке действительно больших изображений или сразу нескольких изображений скрипт может занять даже 20 секунд. Вы не можете рассчитывать на то, что сделаете все, что захотите, за одну секунду.

0
ответ дан 13 December 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: