2012-03-25 2 views
8

Я нашел это на сайте,CSS слияния с PHP

css_loader.php

<?php 
// First of all send css header 
header("Content-type: text/css"); 

// Array of css files 
$css = array(
    'main.css', 
    'menu.css', 
    'content.css' 
); 

// Loop the css Array 
foreach ($css as $css_file) { 

    // Load the content of the css file 
    $css_content = file_get_contents($css_file); 

    // print the css content 
    echo $css_content; 
} 
?> 

Добавить CSS на страницу

<link href="css_loader.php" rel="stylesheet" type="text/css" /> 

Это выглядит очень логично, но когда я применил его к моя страница, он не работал.

можно объединить файлы CSS таким образом?

+0

Конечно, это возможно. Почему он не работает для вас? Нет ошибок? Ничего? – Brad

+1

Что означает «не работает»? когда вы получаете доступ к 'css_loader.php' непосредственно из своего браузера и сохраняете наш доход, что вы видите? – Yaniro

+0

Как вы применили его к своей странице? Заголовки не работают после того, как вы уже вышли в браузер. Также CSS должен быть помещен в раздел '' не телом, поэтому он имеет значение для того, как вы это применили. – sdjuan

ответ

10

У Вас есть ошибка в вашем коде, вот правильный код:

<?php 
// First of all send css header 
header("Content-type: text/css"); 

// Array of css files 
$css = array(
    'main.css', 
    'menu.css', 
    'content.css' 
); 

// Prevent a notice 
$css_content = ''; 

// Loop the css Array 
foreach ($css as $css_file) { 
    // Load the content of the css file 
    $css_content .= file_get_contents($css_file); 
} 

// print the css content 
echo $css_content; 
?> 

И я надеюсь, что файлы находятся в одной папке. Возможно, вы должны использовать __DIR__ или dirname(__FILE__), чтобы получить относительный путь к вашим файлам.

+0

Да, это исправлено. но CSS не распространяется на страницу. –

+0

Я проверил этот случай. Возможно, у вас есть ошибка в вашем php-файле. вызовите файл direkt и протестируйте его. Когда один из файлов отсутствует, вы получаете Warning: file_get_contents (main.css) и в поток text/css, который браузер не может обработать. – Stony

11

Стони показал вам вашу ошибку .... Теперь для более улучшенной версии

 header('Content-type: text/css'); 
     ob_start("compress"); 
     function compress($buffer) { 
      /* remove comments */ 
      $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer); 
      /* remove tabs, spaces, newlines, etc. */ 
      $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer); 
      return $buffer; 
     } 

     /* your css files */ 
     include('main.css'); 
     include('menu.css'); 
     include('content.css'); 
     ob_end_flush(); 
+0

nice one thanks –

+0

приветствуется :) – Baba

0

эй вы проверили, если ваш сервер добавляет несколько строк кода (например, кода аналитики). если это так, вы должны добавить правило в .htaccess, которое останавливает сервер для добавления строк в ваш код. это можно сделать, добавив это в .htaccess - "php_value auto_append_file none" без кавычек, конечно. я надеюсь, что это помогает

1
<?php 

// Array of css files 
$css = array(
'first.css', 
'second.css' 
); 

$mergeCSS = ""; 
// Loop the css Array 
foreach ($cssas $css_file) { 
    // Load the content of the css file 
    $mergeCSS.= file_get_contents($css_file); 
} 

// Remove comments also applicable in javascript 
$mergeCSS= preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $mergeCSS); 

// Remove space after colons 
$mergeCSS= str_replace(': ', ':', $mergeCSS); 

// Remove whitespace 
$mergeCSS= str_replace(array("\n", "\t", ' ', ' ', ' '), '', $mergeCSS); 

//Generate Etag 
$genEtag = md5_file($_SERVER['SCRIPT_FILENAME']); 

// call the browser that support gzip, deflate or none at all, if the browser doest  support compression this function will automatically return to FALSE 
ob_start('ob_gzhandler'); 

// call the generated etag 
header("Etag: ".$genEtag); 

// Same as the cache-control and this is optional 
header("Pragma: public"); 

// Enable caching 
header("Cache-Control: public "); 

// Expire in one day 
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT'); 

// Set the correct MIME type, because Apache won't set it for us 
header("Content-type: text/javascript"); 

// Set accept-encoding 
header('Vary: Accept-Encoding'); 

// Write everything out 
echo($mergeCSS); 

?> 

Этот код также совместим для объединения JavaScript

+1

Изменить тип контента из текста/javascript в текст/css – dai

1

Я написал этот класс для таких нужд, он может сделать вывод и сжать его, позже я могу добавить записи в файл конечных результатов , link here

Смежные вопросы