@SevenShots

В css указан один фон, а по факту передаётся другой, в чём причина?

Реализовал на php проверку поддержки браузером изображений avif и webp. Дополнительно сделал их проверку в корневом каталоге. Так вот теперь почему-то в css вставляется правильный путь, при просмотре исходника, а в режиме разработчика и по факту передается jpg. В чём причина? Скрины ниже

Код проверки на поддержку
$res = array();


    $res["accept"] = $HTTP_ACCEPT;

    $res["res_webp"] = strpos($res["accept"], "image/webp");
    $res["res_avif"] = strpos($res["accept"], "image/avif");

    if($res["res_webp"] != false and !empty($res["res_webp"]) and $res["res_webp"] != "" and $res["res_webp"] != " ") {
        // webp поддерживается
        $res["img"]["webp"] = true;
    } else{
        // webp не поддерживается
        $res["img"]["webp"] = false;
    }
    if($res["res_avif"] != false and !empty($res["res_avif"]) and $res["res_avif"] != "" and $res["res_avif"] != " ") {
        // avif поддерживается
        $res["img"]["avif"] = true;
    } else{
        // avif не поддерживается
        $res["img"]["avif"] = false;
    }

    return $res;


Код правки и проверки на существование
$graphic_format = substr($img_path, -3); // Получаем графический формат jpg или png
    $img_path = substr($img_path, 0, -4); // Вырезаем png, jpg
    $res_search = 0;

    /// Проверяем существование изображения в avif
    if(file_exists($img_path.".avif") and $img_supported["img"]["avif"] == true and $res_search == 0) {
        $img_way = $img_path.'.avif'; # Добавляем изображение в avif
        $res_search = 1;
    }
    if(file_exists($img_path.".webp") and $img_supported["img"]["webp"] == true and $res_search == 0) {
        $img_way = $img_path.'.webp'; # Добавляем изображение в webp
        $res_search = 1;
    }
    if($res_search == 0){
        $img_way = $img_path.".".$graphic_format; # Добавляем исходное изображение
    }

     return $img_way;


615db902ab604445277974.png
615db90987595006391955.png
615db911d1b41644923257.png
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Скорее всего дело в разных заголовках "Accept" при запросе ресурса напрямую, и когда он подгружается через <link href, так как эти заголовки отличаются от тех которые браузер посылает если вы просто напрямую открываете ссылку в адресной строке.

Посмотрите в браузере во вкладке "Network" какие заголовки посылает браузер при загрузке main.css.php

spoiler
615dbfe7422e8208650300.pngтык


Решение этой проблемы - определять поддержку формата в скрипте который отображает страницу и исходя из результатов встраивать стили передавая GET-параметры
main.css.php?avif=1&jpg=1&webp=0
И внутри main.css.php строить логику от GET-параметров

Либо никакой логики в main.css.php не делать, а добавить inline-стили в страницу где перезаписать уже background
<link href="main.css.php"> // <- тут всегда jpg
<style>
body {
    background: перезаписываем стили исходя из поддерживаемого формата
}
</style>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@hypero
Кеш очисти
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект