Привет такой вопрос, нашел скрипт который создает сжатые css и js запустил на одном сайте все отлично работает создает файлы cssgz и jsgz вставляет в header и все отображается как надо, поставил на другой сайт все работает но стили и скрипты не подгружаются. Такое чувство что толи браузер толи сервер не воспринимает эти файлы. Что это может быть. код приложу ниже если нужно сделан для битрикса. PHP: $data = $APPLICATION->EndBufferContentMan(); $data = preg_replace(array('/\r+/', '/\t+/'), '', $data); $DATA_DOM = mb_convert_encoding($data, 'HTML-ENTITIES', "UTF-8"); $dom = new DOMDocument; $dom->loadHTML($DATA_DOM); foreach ($dom->getElementsByTagName("script") as $script){ $is_remove = true; if ($script->getAttribute('src')){ $src = $script->getAttribute('src'); if (strpos($src, ".jsgz") === false){ if (strpos($src, "http") === false || strpos($src, $domain) !== false){ $arUrl = explode("?", $src); $arPath = explode("/", $arUrl[0]); $arInfo = pathinfo($arUrl[0]); if ($arInfo["basename"]){ $arUrl[0] = str_replace($domain, "", $arUrl[0]); $content = file_get_contents($_SERVER["DOCUMENT_ROOT"].$arUrl[0]); $content .= ";"; $content = preg_replace('#/\*(?:[^*]*(?:\*(?!/))*)*\*/#', '', $content); $all .= "\n\n" . $content; } } else { $arUrl = explode("?", $src); $arPath = explode("/", $arUrl[0]); $content = file_get_contents($src); $all .= "\n\n" . $content; } } } else { $text = implode(array_map([$script->ownerDocument,"saveHTML"], iterator_to_array($script->childNodes))); $text = mb_convert_encoding($text, "UTF-8", 'HTML-ENTITIES'); $text .= ";"; $all .= "\n\n" . $text . "\n\n"; } if ($is_remove) $remove[] = $script; } $file_name = "script_" . md5($_SERVER["REQUEST_URI"]) . ".jsgz"; foreach ($remove as $item){ $item->parentNode->removeChild($item); } file_put_contents($_SERVER["DOCUMENT_ROOT"]."/compress/" . $file_name, gzencode($all)); foreach ($dom->getElementsByTagName("body") as $body){ $element = $dom->createElement('script'); $element->setAttribute('src', "/compress/" . $file_name . "?" . time()); $body->appendChild($element); } $css = ""; $remove = array(); $file_name_css = "style_" . md5($_SERVER["REQUEST_URI"]) . ".cssgz"; foreach ($dom->getElementsByTagName("link") as $script){ if ($script->getAttribute('href')){ $src = $script->getAttribute('href'); $type = $script->getAttribute('type'); if ($type != "text/css") continue; if (strpos($src, ".cssgz") === false){ if (strpos($src, "http") === false || strpos($src, $domain) !== false){ $arUrl = explode("?", $src); $arPath = explode("/", $arUrl[0]); $arInfo = pathinfo($arUrl[0]); if ($arInfo["basename"]){ $arUrl[0] = str_replace($domain, "", $arUrl[0]); $content = file_get_contents($_SERVER["DOCUMENT_ROOT"].$arUrl[0]); $content = preg_replace(array('/\+/', '/\t+/', '/\n+/'), '', $content); $content = str_replace(array(' '), '', $content); $content = preg_replace('#/\*(?:[^*]*(?:\*(?!/))*)*\*/#', '', $content); $css .= $content; } } else { $arUrl = explode("?", $src); $arPath = explode("/", $arUrl[0]); $content = file_get_contents($src); $content = preg_replace('#/\*(?:[^*]*(?:\*(?!/))*)*\*/#', '', $content); $css .= $content; } } } $remove[] = $script; } foreach ($remove as $item){ $item->parentNode->removeChild($item); } foreach ($dom->getElementsByTagName("head") as $head){ $link = $dom->createElement('link'); $link->setAttribute('href', "/compress/" . $file_name_css . "?" . time()); $link->setAttribute('type', "text/css"); $link->setAttribute('rel', "stylesheet"); $head->appendChild($link); } file_put_contents($_SERVER["DOCUMENT_ROOT"]."/compress/" . $file_name_css, gzencode($css)); $data = $dom->saveHTML(); $data = html_entity_decode($data); echo $data;
ну если есть два сайта и один браузер, то косяк на сервере простой способ поколдовать с миметипами но думаю битриксу не нравится что его хотят улучшить
А тут ещё одна прелесть, сервер один и тот же. Я пока думаю на невалидный архив типо ошибки в css и js. Но не факт.
@Dron-Boy нее, эт наврятли. Скорее всего битрикс считает это улучшение не кошерным и блочит его. вставь в код сжимателя логирование, над глянуть запускается ли он на исполнение то хоть?
Скрипт отрабатывает и сохраняет файлы в папке compress после чего по api Битрикс подставляет в шапку или футер не помню.