Прежде всего, вместо чтения файла с file_get_contents
и только затем, отображая его содержимое, вы можете использовать readfile
: он будет выполнять обе операции в одном вызове - что будет вероятно, будет быстрее и использовать меньше памяти, чем:
- загрузить полный файл в память с помощью
file_get_only
- и только после этого отправлять этот контент в outout
Затем, если вы хотите, чтобы только идентифицированный пользователь имел доступ к изображениям, у вас нет особого выбора: если ваш механизм идентификации основан на PHP, вам придется пройти через PHP, чтобы ограничить доступ к файлу - что да, это будет немного медленнее, чем при использовании Apache напрямую для обслуживания контента.
Также: здесь вы говорите:
Я надеюсь, что пользователь никогда не узнает
прямой URL к изображению
Читая это, я предполагаю, что ваши изображения могут быть доступны напрямую через Apache, минуя ваш PHP-скрипт, если кто-то знает их URL; безопасность от неясности не хороша.
Лучшим решением, если вы не хотите, чтобы ваши изображения обслуживались Apache, было бы поместить их в каталог, из которого Apache ничего не будет обслуживать:
- любой подкаталог вашего корневого документа, защищенный файлом .htaccess, содержащим "
Deny from all
"
- или каталог, который не находится под вашим корневым каталогом и, следовательно, никогда не будет обслуживаться Apache.
В любом случае, это обеспечивает доступ к файлам только ваших сценариев, но не Apache напрямую, что означает, что пользователь не должен обходить сценарий.
Другая идея, касающаяся проблемы производительности, может заключаться в том, чтобы указать браузеру, что он может кэшировать ваши изображения - по крайней мере, если это имеет смысл.
Например, вас могут заинтересовать заголовки HTTP, такие как "Etag" и / или "Last-Modified".