2011-07-05 6 views
2

Minify 저는 동적 인 PHP 스타일 시트를 압축해야 할 때까지 JS와 CSS를 모두 압축하여 사용하고 있습니다.동적 PHP 스타일 시트 축소하기

은 나는 그것이 CSS 파일이었다 생각으로 그것을 바보 htaccess로를 사용하려고하지만 그때는 mod_rewrite를

에 의해 영향을되지 않을 것 절대 파일 경로를 사용하여 실현 어쨌든 나는 PHP 파일에 그것을 가리 킵니다 때마다, 항상 '400 Bad Request'를 반환합니다. 내 자신의 압축 스크립트를 작성하는 것 이외의 다른 방법을 해결하는 방법에 대한 아이디어?

+0

동적 PHP는 스타일은 무엇인가? –

+0

그래서 플랫 파일과 함께 작동하는 도구를 사용하여 동적으로 생성되는 것을 압축하려고합니다. 그게 조금은 소리가 나 .. 너에게 불가능한가? :) –

+0

어둠 속에서 찌르기이므로 주석으로 추가하고 있습니다. 정적 CSS 파일을 작성한 다음 @import 문으로 동적 파일을 포함하여 정적 파일을 축소하십시오. 그것이 작동하는 경우, 내가 대답으로 추가 할 알려주세요;) BTW, 당신은 @ 수입을 피하기로되어 있지만, 헤이. – picus

답변

6

스타일 시트를 축소하고 압축하는 것이 가장 좋은 방법은 직접 처리하는 것입니다. 다음 코드를 확인하십시오 :

<?php 
header("Content-Type: text/css"); 
header("Last-Modified: ".gmdate('D, d M Y H:i:s', filemtime($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']))." GMT"); 
header("Expires: ".gmdate('D, d M Y H:i:s', (filemtime($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']) + 691200))." GMT"); 

//This GZIPs the CSS for transmission to the user 
//making file size smaller and transfer rate quicker 
ob_start("ob_gzhandler"); 
ob_start("compress"); 

//Function for compressing the CSS as tightly as possible 
function compress($buffer) { 
    //Remove CSS comments 
    $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer); 
    //Remove tabs, spaces, newlines, etc. 
    $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer); 
    return $buffer; 
} 

//Main style 
require_once($_SERVER['DOCUMENT_ROOT']."/templates/style/style.css"); 

//Other style 
if($php_variable) { 
    require_once($_SERVER['DOCUMENT_ROOT']."/templates/style/other.css"); 
} 

ob_end_flush(); 
ob_end_flush(); 
?> 

여기에 많은 것들이 있습니다. 그래서 설명해 드리겠습니다. CSS되는 등의 파일 형식을 설정

헤더

  • .
  • 캐시 제어에 대해 Last-ModifiedExpires 헤더를 설정합니다 (1 주일 조금 넘게 설정하면 변경할 수 있습니다).

는 스크립트의 축소 및 GZIP ob_start를 사용

  • , 우리는이 파일을 GZIP뿐만 아니라 사용자 정의 기능 compress을 실행하도록 지시.
  • compress은 브라우저로 보낼 때 모든 CSS 주석과 공백을 제거합니다. 즉, 모든 주석을 유지하고 소스 파일에서 원하는대로 편집하여보다 쉽게 ​​편집 할 수 있지만 최소한 브라우저로만 보내십시오. 스타일 시트를 가져올 require를 사용

스타일

  • . 원하는만큼의 스타일 시트에 대해 이렇게하십시오. 그들은 모두 단일 HTTP 요청으로 사용자에게 배달됩니다.

당신은 당신을 일반 CSS 파일로 파일에 전화 할게 새 파일

사용.

<style type="text/css" src="/path/to/css-script.php"></style> 

결론

여러 멋진 일을하고,이 방법을 사용.

  • 캐싱을위한 올바른 헤더를 제공하여 사이트를 신속하게 다시 방문 할 수있게합니다.
  • 모든 내용에 추가 공백이나 주석을 포함하지 않습니다.
  • 파일 크기를 줄이려면 GZIP을 사용하여 파일을 압축합니다.
  • 하나의 HTTP 요청에 모든 스타일 시트를 포함하므로 최적화에 적합합니다.
  • @import 진술을 사용하는 것을 피하십시오 ... 그 자체로 멋진 것입니다.
  • 여러 스타일 시트를 유지하고 PHP 논리를 사용하여 포함하거나 포함하지 않을 수 있습니다.
  • 방문자에게 아무런 영향을 미치지 않고 원하는대로 소스 스타일 시트를 간격을두고 주석 처리 할 수 ​​있습니다.

위의 compress 함수는 CSS에 대한 것이므로 생략해도되지만 동일한 방법으로 JavaScript에 사용할 수 있습니다.

사용이 캐시 제어 기술과 함께이 기술을, 당신은 자신에게 멋진 CSS/JS 핸들러를 구축했습니다 : How to force browser to reload cached CSS/JS files?

+1

나는 이것을 약간 적응시켜야 할 것이다. Minify는 CSS에서 정말 느립니다. – timw4mail

+0

하아 완벽한 대답, 좋은 한 갈라 : :) 내가 굉장 단어의 과도한 사용에 대한 보너스 포인트를 줄 수 있으면 좋겠어 : P – Horse

+0

gzip 지원 부족으로 인해 사파리와 함께 일하는 것을 잊지 마라. – Horse