>백엔드 개발 >PHP 튜토리얼 >php_php 팁에서 여러 CSS 및 JS 파일을 압축하는 방법

php_php 팁에서 여러 CSS 및 JS 파일을 압축하는 방법

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-05-16 20:32:271065검색

이 기사의 예에서는 PHP에서 여러 CSS 및 JS 파일을 압축하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 구현 방법은 다음과 같습니다.

1. CSS 압축

코드 복사 코드는 다음과 같습니다.
header('콘텐츠 유형: 텍스트/css')
ob_start("압축")
함수 압축($buffer) {
/* 주석 제거 */
$buffer = preg_replace('!/*[^*]** ([^/][^*]** )*/!', '', $buffer)
/* 탭, 공백, 줄 바꿈 등을 제거합니다. */
$buffer = str_replace(array("rn", "r", "n", "t", ' ', ' ', ' '), '', $buffer); $버퍼 반환

 
/* CSS 파일 */ 
include('galleria.css')
include('articles.css')
 
ob_end_flush();
사용 방법:

코드 복사 코드는 다음과 같습니다.
테스트

2. js를 압축하고 jsmin 클래스를 사용합니다.

이 예의 출처: http://code.google.com/p/minify/


코드 복사 코드는 다음과 같습니다.
header('Content-type: text/javascript')
'jsmin.php'가 필요합니다
echo JSMin::minify(file_get_contents('common.js') . file_get_contents('common2.js'));
jsmin.php 파일은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

/**
 * jsmin.php - Douglas Crockford의 JSMin을 PHP로 구현한 것입니다.
 *
 * 이것은 몇 가지만 사용하여 jsmin.c를 PHP로 직접 포팅한 것입니다
 * PHP 관련 성능이 조정되었습니다. 또한 jsmin.c는 stdin과
에서 읽는 반면  * stdout으로 출력합니다. 이 라이브러리는 문자열을 입력으로 받아들이고 다른 문자열을 반환합니다
 * 문자열을 출력합니다.
 *
 * PHP 5 이상이 필요합니다.
 *
 * 이로써
에 따라 이 버전의 라이브러리를 사용할 수 있는 권한이 부여됩니다.  * 다음 라이센스가 있는 jsmin.c와 동일한 용어:
 *
 * --
 * 저작권 (c) 2002 Douglas Crockford (www.crockford.com)
 *
 *
사본을 얻는 모든 사람에게 무료로 허가가 부여됩니다.  * 이 소프트웨어 및 관련 문서 파일("소프트웨어")은
 * 다음 권리를 포함하되 이에 국한되지 않는 제한 없는 소프트웨어
 * 사본의 사용, 복사, 수정, 병합, 출판, 배포, 재라이센스 부여 및/또는 판매
 * 소프트웨어를 제공하고 소프트웨어를 제공받은 사람이 다음을 수행할 수 있도록 허용합니다.
 * 따라서 다음 조건이 적용됩니다:
 *
 * 위 저작권 고지와 본 허가 고지는 모든 콘텐츠에 포함됩니다
 * 소프트웨어의 사본 또는 상당 부분.
 *
 * 소프트웨어는 악이 아닌 선을 위해 사용되어야 합니다.
 *
 * 소프트웨어는 어떠한 종류의 명시적 또는 명시적 보증 없이 "있는 그대로" 제공됩니다.
 * 상품성 보증을 포함하되 이에 국한되지 않는 묵시적인 내용입니다.
 * 특정 목적에 대한 적합성 및 비침해. 어떠한 경우에도
 * 작성자 또는 저작권 보유자는 모든 청구, 손해 또는 기타 사항에 대해 책임을 집니다.
 * 계약, 불법 행위 또는 기타 행위에서 발생하는 책임은 다음과 같습니다.
 * 소프트웨어나
의 사용 또는 기타 거래와 관련되거나 이와 관련하여  * 소프트웨어.
 * --
 *
 * @package JSMin
 * @author 라이언 그로브
 * @copyright 2002 더글라스 크록포드 (jsmin.c)
 * @copyright 2008 라이언 그로브 (PHP 포트)
 * @copyright 2012 아담 고포스 (업데이트)
 * @license http://opensource.org/licenses/mit-license.php MIT 라이선스
 * @version 1.1.2 (2012-05-01)
 * @링크 https://github.com/rgrove/jsmin-php
 */
클래스 JSMin {
  const ORD_LF            = 10;
  const ORD_SPACE         = 32;
  const ACTION_KEEP_A     = 1;
  const ACTION_DELETE_A   = 2;
  const ACTION_DELETE_A_B = 3;
  보호된 $a           = '';
  보호된 $b           = '';
  보호된 $input       = '';
  보호된 $inputIndex  = 0;
  보호된 $inputLength = 0;
  보호된 $lookAhead   = null;
  보호된 $output      = '';
  // -- 공개 정적 메소드 ------------------------------ -------
  /**
   * 자바스크립트 축소
   *
   * @uses __construct()
   * @min()을 사용합니다
   * @param string $js 축소할 Javascript
   * @return 문자열
  */
  공개 정적 함수 minify($js) {
    $jsmin = 새로운 JSMin($js);
    return $jsmin->min();
  }
  // -- 공개 인스턴스 메소드 ------------------------------ -----
  /**
   * 생성자
   *
   * @param string $input 축소할 Javascript
  */
  공개 함수 __construct($input) {
    $this->input       = str_replace("rn", "n", $input);
    $this->inputLength = strlen($this->input);
  }
  // -- 보호된 인스턴스 메서드 ------------------------------ --
  /**
   * 액션 - 뭔가를 해보세요! 수행할 작업은 $command 인수에 따라 결정됩니다.
   *
   * 액션은 문자열을 단일 문자로 처리합니다. 와!
   * 액션 앞에 ( 또는 , 또는 =이 있으면 정규식으로 인식합니다.
   *
   * @next() 사용
   * @는 get()을 사용합니다
   * @throws JSMinException 파서 오류가 발견된 경우:
   *         - 종료되지 않은 문자열 리터럴
   *         - 정규 표현식 리터럴에 설정된 종료되지 않은 정규 표현식
   *         - 종료되지 않은 정규식 리터럴
   * @param int $command 클래스 상수 중 하나:
   *      ACTION_KEEP_A      출력 A. B를 A에 복사하고 다음 B를 가져옵니다.
   *      ACTION_DELETE_A    B를 A에 복사합니다. 다음 B를 가져옵니다. (A 삭제)
   *      ACTION_DELETE_A_B  다음 B를 가져옵니다. (B 삭제)
  */
  보호된 함수 동작($command) {
    스위치($명령) {
      사례 자체::ACTION_KEEP_A:
        $this->output .= $this->a;
      사례 자체::ACTION_DELETE_A:
        $this->a = $this->b;
        if ($this->a === "'" || $this->a === '"') {
          (;;) {
            $this->output .= $this->a;
            $this->a       = $this->get();
            if ($this->a === $this->b) {
              휴식;
            }
            if (ord($this->a) <= self::ORD_LF) {
              throw new JSMinException('종료되지 않은 문자열 리터럴.');
            }
            if ($this->a === '\') {
              $this->output .= $this->a;
              $this->a       = $this->get();
            }
          }
        }
      사례 자체::ACTION_DELETE_A_B:
        $this->b = $this->next();
        if ($this->b === '/' && (
            $this->a === '(' || $this->a === ',' || $this->a === '=' ||
            $this->a === ':' || $this->a === '[' || $this->a === '!' ||
            $this->a === '&' || $this->a === '|' || $this->a === '?' ||
            $this->a === '{' || $this->a === '}' || $this->a === ';' ||
            $this->a === "n" )) {
          $this->output .= $this->a . $this->b;
          (;;) {
            $this->a = $this->get();
            if ($this->a === '[') {
              /*
                정규식 [...] 세트 내부에는 '/' 자체가 포함될 수 있습니다. 예: 460행 근처의 mootools Form.Validator:
                  return Form.Validator.getValidator('IsEmpty').test(element) || (/^(?:[a-z0-9!#$%&'* /=?^_`{|}~-].?){0,63}[a-z0-9!#$%& '* /=?^_`{|}~-]@(?:(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9 ])?.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?|[(?:(?:25[0- 5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0- 4][0-9]|[01]?[0-9][0-9]?)])$/i).test(element.get('value'));
              */
              (;;) {
                $this->output .= $this->a;
                $this->a = $this->get();
                if ($this->a === ']') {
                    휴식;
                } elseif ($this->a === '\') {
                  $this->output .= $this->a;
                  $this->a       = $this->get();
                } elseif (ord($this->a) <= self::ORD_LF) {
                  throw new JSMinException('정규식 리터럴에 설정된 종료되지 않은 정규식.');
                }
              }
            } elseif ($this->a === '/') {
              휴식;
            } elseif ($this->a === '\') {
              $this->output .= $this->a;
              $this->a       = $this->get();
            } elseif (ord($this->a) <= self::ORD_LF) {
              throw new JSMinException('종료되지 않은 정규식 리터럴.');
            }
            $this->output .= $this->a;
          }
          $this->b = $this->next();
        }
    }
  }
  /**
   * 다음 문자를 가져옵니다. Ctrl 문자를 공백으로 변환하세요.
   *
   * @return 문자열|null
  */
  보호된 함수 get() {
    $c = $this->lookAhead;
    $this->lookAhead = null;
    if ($c === null) {
      if ($this->inputIndex < $this->inputLength) {
        $c = substr($this->input, $this->inputIndex, 1);
        $this->inputIndex = 1;
      } 그 밖의 {
        $c = null;
      }
    }
    if ($c === "r") {
      "n"을 반환합니다.
    }
    if ($c === null || $c === "n" || ord($c) >= self::ORD_SPACE) {
      $c;를 반환
    }
    '' 반환;
  }
  /**
   * $c는 문자, 숫자, 밑줄, 달러 기호 또는 비ASCII 문자입니까?
   *
   * @return 부울
  */
  보호된 함수 isAlphaNum($c) {
    ord($c) > 126 || $c === '\' || preg_match('/^[w$]$/', $c) === 1;
  }
  /**
   * 축소 수행, 결과 반환
   *
   * @액션()을 사용합니다
   * @uses isAlphaNum()
   * @는 get()을 사용합니다
   * @uses peek()
   * @return 문자열
  */
  보호된 함수 min() {
    if (0 == strncmp($this->peek(), "xef", 1)) {
        $this->get();
        $this->get();
        $this->get();
    }
    $this->a = "n";
    $this->action(self::ACTION_DELETE_A_B);
    while ($this->a !== null) {
      스위치 ($this->a) {
        ' ':
          if ($this->isAlphaNum($this->b)) {
            $this->action(self::ACTION_KEEP_A);
          } 그 밖의 {
            $this->action(self::ACTION_DELETE_A);
          }
          휴식;
        사례 "n":
          스위치($this->b) {
            '{':
            '[':
            케이스 '(':
            ' ':
            경우 '-':
            케이스 '!':
            '~' 경우:
              $this->action(self::ACTION_KEEP_A);
              휴식;
            ' ':
              $this->action(self::ACTION_DELETE_A_B);
              휴식;
            기본값:
              if ($this->isAlphaNum($this->b)) {
                $this->action(self::ACTION_KEEP_A);
              }
              그렇지 않으면 {
                $this->action(self::ACTION_DELETE_A);
              }
          }
          휴식;
        기본값:
          스위치($this->b) {
            ' ':
              if ($this->isAlphaNum($this->a)) {
                $this->action(self::ACTION_KEEP_A);
                휴식;
              }
              $this->action(self::ACTION_DELETE_A_B);
              휴식;
            사례 "n":
              스위치 ($this->a) {
                케이스 '}':
                케이스 ']':
                케이스 ')':
                ' ':
                경우 '-':
                케이스 '"':
                케이스 "'":
                  $this->action(self::ACTION_KEEP_A);
                  휴식;
                기본값:
                  if ($this->isAlphaNum($this->a)) {
                    $this->action(self::ACTION_KEEP_A);
                  }
                  그렇지 않으면 {
                    $this->action(self::ACTION_DELETE_A_B);
                  }
              }
              휴식;
            기본값:
              $this->action(self::ACTION_KEEP_A);
              휴식;
          }
      }
    }
    $this->output;
을 반환하세요.   }
  /**
   * 설명을 건너뛰고 다음 문자를 가져옵니다. peek()을 사용하여 확인합니다
   *  '/' 뒤에 '/' 또는 '*'가 오는 경우.
   *
   * @는 get()을 사용합니다
   * @uses peek()
   * @throws JSMinException 종료되지 않은 댓글에 대해
   * @return 문자열
  */
  보호된 함수 next() {
    $c = $this->get();
    if ($c === '/') {
      스위치($this->peek()) {
        '/':
          (;;) {
            $c = $this->get();
            if (ord($c) <= self::ORD_LF) {
              $c;를 반환
            }
          }
        경우 '*':
          $this->get();
          (;;) {
            스위치($this->get()) {
              경우 '*':
                if ($this->peek() === '/') {
                  $this->get();
                  '' 반환;
                }
                휴식;
              사례 null:
                throw new JSMinException('종료되지 않은 주석.');
            }
          }
           기본값:
           $c 반환;
}
}
$c 반환
}
/**
   * 다음 문자를 가져옵니다. Ctrl 문자인 경우 공백이나 개행 문자로 변환하세요.
   *
   * @는 get()을 사용합니다
   * @return 문자열|null
  */
보호된 함수 peek() {
$this->lookAhead = $this->get();
$this->lookAhead;
반환 }
}
// --예외 -------------------------------- --- -----
클래스 JSMinException은 예외를 확장합니다. {}
?>

이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP 빠른 정렬 알고리즘_php 기술에 대한 자세한 설명다음 기사:PHP 빠른 정렬 알고리즘_php 기술에 대한 자세한 설명

관련 기사

더보기