Как и предполагалось, вы можете хранить его в частном каталоге, в идеале где-нибудь вне WEB_ROOT вашего сервера. Несколько вещей, чтобы рассмотреть с этим подходом.
- Убедитесь, что разрешения файловой системы правильно установлены для этого каталога.
При обработке запросов на файл, site.com/20190520/52.php
убедитесь, что вы защищаете от обхода каталога. т.е. убедитесь, что злоумышленник не может сделать что-то вроде site.com/20190520/../../../../../../etc/passwd
Если каждый файл не будет доступен всем, обязательно подумайте, как вы планируете аутентифицировать / авторизовать запросы.
Вы также можете рассмотреть подход к этому с системного уровня. Сохраните файлы в частном каталоге и установите отдельный веб-сервер (vhost и т. Д.) На поддомене, который будет обслуживать файлы. Он может быть настроен так, чтобы не выполнять никаких файлов. Ваш веб-сервер (nginx, apache и т. Д.) Будет определять, как вы это настроите.
Еще одна мысль может заключаться в использовании службы CDN. Эти сервисы предоставят вам API, поэтому ваш пользователь загрузит файл, вы получите его на свой сервер и отправите в CDN. В зависимости от требуемой производительности, это может быть самый простой и быстрый вариант, который будет хорошо масштабироваться.