Обычной практикой является загрузка файлов за пределы корня документа и, как правило, использование случайных имен файлов, которые затем сопоставляются с правильным элементом / объектом / сообщением в базе данных.Если для доступа к файлам требуются дополнительные разрешения, убедитесь, что вы проверили их, прежде чем разрешить загрузку, и, конечно, вы будете загружать только аутентифицированные пользователи.
Fileinfo finfo_
полезно для проверки большинства типов mimety, по крайней меречтобы убедиться, что то, что называется ".txt", на самом деле является текстовым файлом, а не двоичным двоичным объектом, или что ".jpg" действительно является jpeg на основе его первых или последних нескольких байтов.Это может потребовать дополнительной работы по сортировке mimetypes MS Office, так как, если я правильно помню, все они выглядят как application-msword.Но затем вы можете использовать расширение файла, чтобы выяснить, каким оно действительно должно быть (xls, ppt, doc и т. Д.).
Затем скрипт PHP предоставляет загруженный файл, а не веб-сервер, обслуживающий напрямую.Это.По этой причине вы должны хранить тип MIME вместе с ним, чтобы вы могли обслуживать соответствующие заголовки.
header("Content-type: application-whatever");
header("Content-length: size-of-the-file-in-bytes");