ホームページ  >  記事  >  バックエンド開発  >  複数の CSS および JS ファイルを圧縮する PHP メソッド、_PHP チュートリアル

複数の CSS および JS ファイルを圧縮する PHP メソッド、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:14:28752ブラウズ

複数の CSS および JS ファイルを圧縮するための

php メソッド、

この記事の例では、PHP で複数の CSS ファイルと JS ファイルを圧縮する方法を説明します。参考のためにみんなで共有してください。具体的な実装方法は以下の通りです

1. CSSを圧縮します

コードをコピーします コードは次のとおりです:
header('コンテンツタイプ: text/css'); ob_start("圧縮"); 関数圧縮($buffer) {
/* コメントを削除 */
$buffer = preg_replace('!/*[^*]**+([^/][^*]**+)*/!', '', $buffer); /* タブ、スペース、改行などを削除します。 */
$buffer = str_replace(array("rn", "r", "n", "t", ' ', ' ', ' '), '', $buffer); $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 に出力します。このライブラリは文字列を入力として受け入れ、別の文字列を返します
 * 出力としての文字列
 *
 ※PHP5以上が必要です
 *
 * このバージョンのライブラリを使用する許可は、
に基づいて付与されます。  * 次のライセンスを持つ jsmin.c と同じ条件:
 *
 * --
 * 著作権 (c) 2002 Douglas Crockford (www.crockford.com)
 *
 *
のコピーを入手する人には、無償で許可が与えられます。  * このソフトウェアおよび関連ドキュメント ファイル (以下「ソフトウェア」) を取り扱う
 * 制限のないソフトウェア (以下の権利を含む)
 * コピーの使用、コピー、変更、マージ、公開、配布、サブライセンス、および/または販売
 * ソフトウェアの提供、およびソフトウェアが提供された人に以下の行為を許可すること
 * したがって、次の条件が適用されます:
 *
 ※上記著作権表示と本許諾表示は全て含まれるものとします
 * ソフトウェアのコピーまたは実質的な部分。
 *
 * ソフトウェアは悪ではなく善のために使用されるものとします。
 *
 * ソフトウェアは「現状のまま」提供され、明示または
を問わずいかなる種類の保証もありません。  * 商品性の保証を含みますがこれに限定されない、黙示的です
 * 特定の目的への適合性および非侵害。いかなる場合も
 * 著者または著作権所有者は、あらゆる請求、損害、その他について責任を負います
 * 契約行為、不法行為、その他に関わらず、
から生じる責任  * ソフトウェア、または
での使用やその他の取引に関連して、またはそれに関連して  * ソフトウェア
 * --
 *
 * @package JSMin
 * @著者ライアン グローブ
 * @copyright 2002 Douglas Crockford (jsmin.c)
 * @copyright 2008 Ryan Grove (PHP ポート)
 * @copyright 2012 Adam Goforth (更新)
 * @license http://opensource.org/licenses/mit-license.php MIT ライセンス
 * @バージョン 1.1.2 (2012-05-01)
 * @link 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 = '';
  protected $input = '';
  protected $inputIndex = 0;
  protected $inputLength = 0;
  protected $lookAhead = null;
  protected $output = '';
  // -- パブリック静的メソッド -------------------------------------- -----
  /**
   * Javascript を縮小
   *
   * @__construct() を使用します
   * @はmin()を使用します
   * @param string $js 縮小されるJavaScript
   * @戻り文字列
  */
  パブリック静的関数 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 クラス定数の 1 つ:
   * ACTION_KEEP_A A を出力します。B を A にコピーします。次の B を取得します。
   * ACTION_DELETE_A B を A にコピーします。次の B を取得します。(A を削除)。
   * ACTION_DELETE_A_B 次の B を取得します (B を削除します)。
  */
  保護された関数アクション($command) {
    スイッチ($コマンド) {
      ケース self::ACTION_KEEP_A:
        $this->output .= $this->a;
      ケース self::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();
            }
          }
        }
      ケース self::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 === '[') {
              /*
                正規表現 [...] セット内には、「/」自体を含めることができます。例: mootools Form.Validator 行 460 付近:
                  || 戻り値 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 string|null
  */
  保護された関数 get() {
    $c = $this->先読み;
    $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 bool
  */
  保護された関数 isAlphaNum($c) {
    ord($c) を返す > 126 || $c === '\' || preg_match('/^[w$]$/', $c) === 1;
  }
  /**
   * 縮小を実行し、結果を返します
   *
   * @アクション()を使用します
   * @isAlphaNum() を使用します
   * @get()を使用します
   * @はpeek()を使用します
   * @戻り文字列
  */
  保護された関数 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->出力を返す;
  }
  /**
   * コメントをスキップして次の文字を取得します。 Peak() は見るために使用されます
   * 「/」の後に「/」または「*」が続く場合。
   *
   * @get()を使用します
   * @はpeek()を使用します
   * @throws JSMinException 終了していないコメントの場合。
   * @戻り文字列
  */
  保護された関数 next() {
    $c = $this->get();
    if ($c === '/') {
      switch($this->peek()) {
        ケース '/':
          (;;) {
            $c = $this->get();
            if (ord($c)               $c を返します;
            }
          }
        ケース '*':
          $this->get();
          (;;) {
            switch($this->get()) {
              ケース '*':
                if ($this->peek() === '/') {
                  $this->get();
                  ' ' を返します;
                }
                休憩;
              null の場合:
                throw new JSMinException('終了していないコメント。');
}
}
デフォルト:
$c を返す;
}
}
$c を返します;
}
/**
   * 次の文字を取得します。 Ctrl 文字の場合は、スペースまたは改行に変換します。
   *
   * @get()を使用します
   * @return string|null
  */
保護された関数 Peak() {
$this->lookAhead = $this->get();
$this->lookAhead;を返す
}
}
// --例外 -------------------------------------------------- --- ------------------
クラス JSMinException は例外 {}
を拡張します ?>

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/909338.html技術記事 PHP で複数の CSS および JS ファイルを圧縮する方法を実装します。 この記事では、PHP で複数の CSS および JS ファイルを圧縮する方法について説明します。参考のためにみんなで共有してください。具体的な実装方法は以下の通りです。 1....
を押します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。