Необходимо создать индекс, который сократит количество возможных строк, возвращенных как можно быстрее.
Поэтому самый простой индекс для создания был бы на столбце k4, как это может иметь к самому большому количеству различных значений. Только необходимо индексировать первоначальную подстроку k4, где математические ожидания k4 отличаются в рамках той подстроки. Это уменьшит размер индекса и ускорит доступ.
k7 должен также быть индексирован, поскольку это значительно увеличит скорость orderby пункта.
Вы, возможно, также должны экспериментировать (я знаю, я знаю, Вы сказали, не экспериментируют, но это может помочь...) с созданием нескольких индекс столбца в этом порядке: k4, k1, k2, k3. Это, снова, должно сократить количество возможных строк, возвращенных как можно быстрее.
Насколько мне известно, это отличный способ назвать файлы, хотя я бы проверил file_exists ()
и, возможно, добавил случайное число.
Вам нужно сохранить это имя файла в переменной и ссылаться на нее позже, вместо того, чтобы каждый раз полагаться на алгоритм. Это может быть сохранено в пользовательском $ _ SESSION
, файле cookie, переменной GET и т. Д. Между загрузками страницы.
Надеюсь, что это поможет
Я бы рекомендовал сохранить имя файла в сеансе (согласно 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 может решить проблему, с которой вы столкнулись.
Обязательно проверьте наличие файла в этом месте, если вы выбираете имя файла в летать. Если пользовательский ввод разрешен в любой форме или форме, проверьте и отфильтруйте аргумент, чтобы убедиться, что он безопасен. Кроме того, если папка хранилища доступна через Интернет, убедитесь, что вы изменили имя и, возможно, расширение. Вы же не хотите, чтобы кто-то мог загружать код, а затем выполнять его. Это официально ведет к ПЛОХОЙ деятельности.
проверить и отфильтровать аргумент, чтобы убедиться, что он безопасен. Кроме того, если папка хранилища доступна через Интернет, убедитесь, что вы изменили имя и, возможно, расширение. Вы же не хотите, чтобы кто-то мог загружать код, а затем выполнять его. Это официально ведет к ПЛОХОЙ деятельности. проверить и отфильтровать аргумент, чтобы убедиться, что он безопасен. Кроме того, если папка хранилища доступна через Интернет, убедитесь, что вы изменили имя и, возможно, расширение. Вы же не хотите, чтобы кто-то мог загрузить код, а затем выполнить его. Это официально ведет к ПЛОХОЙ деятельности. Просто хочу добавить, что в php есть функция для создания идентификаторов: uniqid
. Вы также можете указать перед идентификатором строку (например, дату?).
Всегда проверяйте ввод данных пользователем и заголовки сервера!
Почему бы не использовать
$filename = md5(rand());
Это будет в значительной степени уникальным в каждом случае. И если вы обнаружите, что $ filename
уже существует, вы можете просто вызвать его снова.
Не рекомендуется использовать ID, зависящий от времени - если вы загружаете два изображения одновременно, последнее может перезаписать более раннее. Вам следует посмотреть на такую функцию, как uniqid () . Однако, если этот сценарий загрузки / изменения размера / сохранения предназначен для «однопользовательского» режима, то это не такая уж большая проблема.
К самой проблеме. На вашем месте я бы просто сохранил вычисленное имя файла в некоторой переменной и использовал бы переменную с этой точки. Уже вычисленные вычисления - пустая трата времени. А при загрузке действительно больших изображений или сразу нескольких изображений скрипт может занять даже 20 секунд. Вы не можете рассчитывать на то, что сделаете все, что захотите, за одну секунду.