За последние 24 часа нас посетили 20797 программистов и 1114 роботов. Сейчас ищут 404 программиста ...

Как получить имя файла с хэшем?

Тема в разделе "PHP для новичков", создана пользователем Sigizmund, 17 сен 2019.

  1. Sigizmund

    Sigizmund Активный пользователь

    С нами с:
    14 июн 2016
    Сообщения:
    37
    Симпатии:
    2
    Адрес:
    Жопа мира
    Здравствуйте. У меня есть файл вида common.8895880b84b2de4ffa69.js хэш 8895880b84b2de4ffa69 может менятся. Как мне на php сгенерировать подключаемый скрипт с путём до этого файла, типа:
    HTML:
    1. <script src="theme/js/file-with-hash.js"></script>
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.816
    Симпатии:
    735
    Адрес:
    Татарстан
    ну так наверное имя файла js так же в php генерится? или нет?
    Если сторонней программой то алгоритм таков:
    1. получаем список файлов по маске common.*.js (например через glob)
    2. получаем имя - генерируем строку с путем

    но вы должны самостоятельно следить, чтоб таких файлов не было несколько - а то подключит все.
    Ну и на шаге 2 можно проверить реально ли хеш файла совпадает с тем что в имени
     
  3. Sigizmund

    Sigizmund Активный пользователь

    С нами с:
    14 июн 2016
    Сообщения:
    37
    Симпатии:
    2
    Адрес:
    Жопа мира
    @ADSoft
    Сейчас попробую. Файл генерируется Webpack, через php нужно только подцепить его.
     
  4. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    160
    Симпатии:
    35
    хэш нужен, чтобы файл не кэшировался в брайузере. Чтоб не городить костыли, то лучше сказать webpack не использовать хэш, а генерить js в один и тот же файл. А уже на пыхе добавлять хэш в виде параметра: common.js?a=djhvbe878d
     
  5. Sigizmund

    Sigizmund Активный пользователь

    С нами с:
    14 июн 2016
    Сообщения:
    37
    Симпатии:
    2
    Адрес:
    Жопа мира
    Таким способом файл не будет кешироваться вообще, а мне это не надо. Нужно, чтобы браузер сбрасывал кеш только у изменившихся файлов.
     
  6. Sigizmund

    Sigizmund Активный пользователь

    С нами с:
    14 июн 2016
    Сообщения:
    37
    Симпатии:
    2
    Адрес:
    Жопа мира
    Через glob сделал:

    PHP:
    1. $generatedCommonCssFile = glob("catalog/view/theme/rucosmetics/stylesheet/generated/common.*.css")[0];
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Я подсмотрел этот приём в yii и пользую сейчас везде
    PHP:
    1. <script src="js/work.bundle.js?v={{filemtime(public_path("js/work.bundle.js"))}}"></script>
    --- Добавлено ---
    В результате файл будет кешится ровно но до того момента, как изменится дата его модификации.
     
    Sigizmund нравится это.
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.816
    Симпатии:
    735
    Адрес:
    Татарстан
    Код (Text):
    1. filetime
    наверное
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    ??? filemtime возвращает время изменения файла.
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    @miketomlin В чем проблема ? изменяется get атрибут как нужно ТСу
    --- Добавлено ---