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

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

May 16, 2016 pm 08:32 PM
css js php 압축 문서

이 기사의 예에서는 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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

CakePHP 로깅 CakePHP 로깅 Sep 10, 2024 pm 05:26 PM

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.

See all articles