То, что я всегда делал (в прошлом, я не писал сценарий загрузки целую вечность), я связывал сценарий загрузки (любой сценарий загрузки) с простой базой данных.
Это предлагает некоторые преимущества;
Вы не предлагаете своим пользователям непосредственное понимание вашей файловой системы (что, если в вашем скрипте browse есть утечка, и вы открываете весь жесткий диск?
Вы можете хранить дополнительную информацию и метаданные простым и эффективным способом
Вы можете запросить файлы / метаданные вместо того, чтобы просто просматривать все файлы
Вы можете включить «безопасное удаление», при котором вы удаляете строку, но сохраняете файл (например)
Вы можете включить ведение журнала проще
Показывать файлы на страницах проще
Вы можете «замаскировать» файлы. Использование базы данных позволяет хранить «замаскированное» имя файла и «настоящее» имя файла.
Очевидно, есть и некоторые недостатки;
Немного сложнее выполнить миграцию, поскольку ваша файловая система и база данных должны быть синхронизированы
В случае сбоя операции (на одном из двух концов) у вас есть «поврежденная» база данных или файловая система
Как упоминалось ранее (но мы не можем упомянуть достаточно, я боюсь); _Сохраните загрузку! _
Проблема типа / расширения MIME - это проблема, которая существует целую вечность. Я думаю, что в настоящее время большая часть Интернета является надежной, но раньше были времена, когда разработчики проверяли либо тип MIME, либо расширение, но никогда не оба (зачем? ). Это привело к тому, что веб-сайты были очень, очень дырявыми.
Если сценарии написаны неправильно, загрузка скриптов - большая дыра в вашей безопасности. Прекрасным примером этого является сайт, который я взломал некоторое время назад (по их запросу, конечно). Они поддерживали загрузку изображений в фотоальбом, но проверяли только расширение файла. Поэтому я загрузил GIF со сканером каталогов внутри. Это позволило мне сканировать всю их систему (поскольку это был не выделенный сервер; я мог видеть чуть больше этого).
Надеюсь, я помог;)