Сидел, допиливал один проектик, ориентированный на юзанье в браузере с телефона. Естественно, логично было бы после всего, что я сделал, открыть страничку на телефоне и проверить: работает там чё-нить ваще или нет. Прогрузилась, картина маслом: всё поехало, что-то вообще без стилей...
Знакомьтесь, кэш. Дело в том, что браузер положил себе на диск всю загруженную статику, а затем спокойно решил грузить стили с диска, а не с сервера. Это значительно ускоряет загрузку страниц, однако после изменений может пройти значительное время, а пользователи так и будут смотреть на съехавшее изображение.
Что делать? Дать ему новый файл. Влом каждый раз переименовывать? Ясень перец, это нормально. Файл мы оставим прежним, а вот ссылку поменяем. Достаточно передать параметр и браузер железно пройдёт по ссылке - сервер действительно мог бы отдать ему отличный файл в зависимости от параметра. Но в нашем случае он будет бесполезным. Должно получиться что-то вроде:
style.css?dsa=0
Но согласитесь, каждый раз при изменении стилей лезть перебивать ссылки: а если у вас страниц таких 20-30? А если больше? Есть ещё один вариант. Подробно расписывать не буду, так как вариант тоже не очень удобен. Можно этот переданный параметр рандомить каждый раз. Тогда каждый раз, при открытии, будет новая ссылка. Но, к сожалению, тогда пользователи остануться совсем без кэша.
Вот сделать бы так, чтобы ссылка сама менялась именно тогда, когда мы обновляем стили/скрипты/прочее... А пжалста: php вполне себе имеет функции операций над файлами, в том числе есть фукнция возвращающая дату последнего изменения. Смекаешь? Всё что надо, это взять и подставить строку с датой изменения файла в качестве параметра в ссылку:
<link rel="stylesheet" type="text/css" href="style/main.css?d=<?php
echo date("dHis", filemtime('style/main.css'));
?>"/>
Тогда ссылка примет вид:
style/main.css?d=17223450
Таким образом, при обновлении файла браузер найдёт обновлённую ссылку и пойдёт качать новый.