2012-03-25 14 views
8

He encontrado esto en una página web,CSS fusión con 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; 
} 
?> 

Añadir CSS a la página

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

Parece muy lógico, pero cuando lo apliqué a mi página, no funcionó.

¿es posible fusionar archivos CSS de esta forma?

+0

Por supuesto que es posible. ¿Por qué no funcionó para ti? ¿Sin errores? ¿Nada? – Brad

+1

¿Qué significa "no funciona"? cuando accede a 'css_loader.php' directamente desde su navegador y guarda el resultado, ¿qué ve? – Yaniro

+0

¿Cómo lo aplicaste a tu página? Los encabezados no funcionan después de que ya salga al navegador. También se debe colocar CSS en la sección '', no en el cuerpo, por lo que hace toda la diferencia sobre cómo se aplicó esto. – sdjuan

Respuesta

10

Tienes un error en el código, aquí está el código correcto:

<?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; 
?> 

y espero que los archivos están en la misma carpeta. Tal vez debería usar __DIR__ o dirname(__FILE__) para obtener la ruta relativa a sus archivos.

+0

sí, arreglé esto. pero todavía CSS no se aplica a la página. –

+0

He probado este caso. Tal vez tienes un error en tu archivo php. llama al archivo direkt y pruébalo. Cuando falta uno de los archivos, obtienes Warning: file_get_contents (main.css) y en una secuencia text/css el navegador no puede manejarlo. – Stony

11

Stoney que ha demostrado su error .... ahora para una versión más mejorada

 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 thank –

+0

de nada :) – Baba

0

Hey Ha comprobado si su servidor añade unas líneas a su código (por ejemplo, un código de Analytics). de ser así, debe agregar una regla en .htaccess que detenga al servidor para agregar líneas a su código. esto se puede hacer agregando esto a .htaccess - "php_value auto_append_file none" sin comillas, por supuesto. Espero que esto ayude

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); 

?> 

Este código también es compatible para la fusión de JavaScript

+1

Cambiar el tipo de contenido de texto/javascript a texto/css – dai

1

escribí esta clase para tales necesidades, se puede hacer que la salida y comprimirlo, después puedo añadir escribir un archivo de los resultados finales , link here