У меня есть каталог вне webroot с изображениями, css и javascripts.
Эти файлы часто меняются.
Я мог бы написать скрипт, который находит файл, определяет тип mime и выводит его в браузер.
Или
я мог найти файл, скопировать его в веб-доступный каталог и перенаправить на этот файл с помощью заголовка. Когда файл запрашивается снова, сначала будет проверяться, изменен ли файл, и снова перенаправить.
Что было бы лучше? Каждый запрос файла чтения или каждого запроса отметит отметку времени и перенаправляет (так что 2 запроса вместо одного)
Первое правило производительности: бенчмарк, не спекулируйте.
Я немедленно нарушу это первое правило и предположим, что readfile будет быстрее, потому что он устраняет кругооборот в сети.
Какая производительность вам нужна? Самый быстрый способ сделать это – настроить отдельный веб-сервер статического контента под субдоменом (например, http://static.mysite.com/foo.jpg ) на совершенно другой машине, а затем позволить этому веб-серверу обрабатывать часто изменяющиеся файлы image / css / javascript.
Другое предложение: если вы контролируете файловую систему, возможно, вы можете создать символическую ссылку в каталоге, доступном для веб-доступа, к файлу изображения? Либо использование exec () для вызова команды ln, либо, может быть, функция symlink () PHP может работать.
Как насчет символической ссылки непосредственно на файл, а не на весь каталог? Вы даже можете сделать это «статическим» именем файла, а затем пусть веб-сервер выполнит проверку временной отметки и кеширование изменений, которая, вероятно, будет намного быстрее.
Конечно же, контрольные показатели 🙂