За последние 24 часа нас посетили 67889 программистов и 1648 роботов. Сейчас ищут 919 программистов ...

gz сжатие css и js

Тема в разделе "PHP для новичков", создана пользователем Dron-Boy, 4 дек 2018.

  1. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Привет такой вопрос, нашел скрипт который создает сжатые css и js запустил на одном сайте все отлично работает создает файлы cssgz и jsgz вставляет в header и все отображается как надо, поставил на другой сайт все работает но стили и скрипты не подгружаются. Такое чувство что толи браузер толи сервер не воспринимает эти файлы. Что это может быть.
    код приложу ниже если нужно сделан для битрикса.


    PHP:
    1.     $data = $APPLICATION->EndBufferContentMan();
    2.     $data = preg_replace(array('/\r+/', '/\t+/'), '', $data);
    3.     $DATA_DOM = mb_convert_encoding($data, 'HTML-ENTITIES', "UTF-8");
    4.     $dom = new DOMDocument;
    5.     $dom->loadHTML($DATA_DOM);
    6.    
    7.     foreach ($dom->getElementsByTagName("script") as $script){
    8.         $is_remove = true;
    9.         if ($script->getAttribute('src')){
    10.         $src = $script->getAttribute('src');
    11.         if (strpos($src, ".jsgz") === false){
    12.             if (strpos($src, "http") === false || strpos($src, $domain) !== false){
    13.                 $arUrl = explode("?", $src);
    14.                 $arPath = explode("/", $arUrl[0]);
    15.                 $arInfo = pathinfo($arUrl[0]);
    16.                 if ($arInfo["basename"]){
    17.                     $arUrl[0] = str_replace($domain, "", $arUrl[0]);
    18.                     $content = file_get_contents($_SERVER["DOCUMENT_ROOT"].$arUrl[0]);
    19.                     $content .= ";";
    20.                     $content = preg_replace('#/\*(?:[^*]*(?:\*(?!/))*)*\*/#', '', $content);
    21.                     $all .= "\n\n" . $content;
    22.                 }
    23.             } else {
    24.                 $arUrl = explode("?", $src);
    25.                 $arPath = explode("/", $arUrl[0]);
    26.                 $content = file_get_contents($src);
    27.                 $all .= "\n\n" . $content;
    28.             }
    29.         }
    30.         } else {
    31.             $text = implode(array_map([$script->ownerDocument,"saveHTML"], iterator_to_array($script->childNodes)));
    32.             $text = mb_convert_encoding($text, "UTF-8", 'HTML-ENTITIES');
    33.             $text .= ";";
    34.             $all .= "\n\n" . $text . "\n\n";
    35.         }
    36.         if ($is_remove)
    37.         $remove[] = $script;
    38.     }
    39.     $file_name = "script_" . md5($_SERVER["REQUEST_URI"]) . ".jsgz";
    40.     foreach ($remove as $item){
    41.         $item->parentNode->removeChild($item);
    42.     }
    43.    
    44.     file_put_contents($_SERVER["DOCUMENT_ROOT"]."/compress/" . $file_name, gzencode($all));
    45.     foreach ($dom->getElementsByTagName("body") as $body){
    46.         $element = $dom->createElement('script');
    47.         $element->setAttribute('src', "/compress/" . $file_name . "?" . time());
    48.         $body->appendChild($element);
    49.     }
    50.  
    51.  
    52.     $css = "";
    53.     $remove = array();
    54.     $file_name_css = "style_" . md5($_SERVER["REQUEST_URI"]) . ".cssgz";
    55.     foreach ($dom->getElementsByTagName("link") as $script){
    56.         if ($script->getAttribute('href')){
    57.             $src = $script->getAttribute('href');
    58.             $type = $script->getAttribute('type');
    59.             if ($type != "text/css")
    60.             continue;
    61.             if (strpos($src, ".cssgz") === false){
    62.                 if (strpos($src, "http") === false || strpos($src, $domain) !== false){
    63.                     $arUrl = explode("?", $src);
    64.                     $arPath = explode("/", $arUrl[0]);
    65.                     $arInfo = pathinfo($arUrl[0]);
    66.                     if ($arInfo["basename"]){
    67.                         $arUrl[0] = str_replace($domain, "", $arUrl[0]);
    68.                         $content = file_get_contents($_SERVER["DOCUMENT_ROOT"].$arUrl[0]);
    69.                         $content = preg_replace(array('/\+/', '/\t+/', '/\n+/'), '', $content);
    70.                         $content = str_replace(array('  '), '', $content);
    71.                         $content = preg_replace('#/\*(?:[^*]*(?:\*(?!/))*)*\*/#', '', $content);
    72.                         $css .= $content;
    73.                     }
    74.                 } else {
    75.                     $arUrl = explode("?", $src);
    76.                     $arPath = explode("/", $arUrl[0]);
    77.                     $content = file_get_contents($src);
    78.                     $content = preg_replace('#/\*(?:[^*]*(?:\*(?!/))*)*\*/#', '', $content);
    79.                     $css .= $content;
    80.                 }
    81.             }
    82.         }
    83.         $remove[] = $script;
    84.     }
    85.     foreach ($remove as $item){
    86.         $item->parentNode->removeChild($item);
    87.     }
    88.     foreach ($dom->getElementsByTagName("head") as $head){
    89.         $link = $dom->createElement('link');
    90.         $link->setAttribute('href', "/compress/" . $file_name_css . "?" . time());
    91.         $link->setAttribute('type', "text/css");
    92.         $link->setAttribute('rel', "stylesheet");
    93.         $head->appendChild($link);
    94.     }
    95.     file_put_contents($_SERVER["DOCUMENT_ROOT"]."/compress/" . $file_name_css, gzencode($css));
    96.     $data = $dom->saveHTML();
    97.     $data = html_entity_decode($data);
    98.     echo  $data;
     
  2. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    ну если есть два сайта и один браузер, то косяк на сервере
    простой способ поколдовать с миметипами
    но думаю битриксу не нравится что его хотят улучшить
     
  3. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    А тут ещё одна прелесть, сервер один и тот же. Я пока думаю на невалидный архив типо ошибки в css и js. Но не факт.
     
  4. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Dron-Boy нее, эт наврятли. Скорее всего битрикс считает это улучшение не кошерным и блочит его.

    вставь в код сжимателя логирование, над глянуть запускается ли он на исполнение то хоть?
     
  5. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Скрипт отрабатывает и сохраняет файлы в папке compress после чего по api Битрикс подставляет в шапку или футер не помню.