加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php实现压缩多个CSS与JS文件的方法

发布时间:2020-12-13 02:09:08 所属栏目:PHP教程 来源:网络整理
导读:《PHP实战:php实现压缩多个CSS与JS文件的方法》要点: 本文介绍了PHP实战:php实现压缩多个CSS与JS文件的方法,希望对您有用。如果有疑问,可以联系我们。 PHP教程 本篇章节讲解php实现压缩多个CSS与JS文件的办法.供大家参考研究.具体实现办法如下

《PHP实战:php实现压缩多个CSS与JS文件的方法》要点:
本文介绍了PHP实战:php实现压缩多个CSS与JS文件的方法,希望对您有用。如果有疑问,可以联系我们。

PHP教程本篇章节讲解php实现压缩多个CSS与JS文件的办法.分享给大家供大家参考.具体实现办法如下:

PHP教程1. 压缩css

代码如下:
<?php???
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("rn","r","n","t",'? ','??? ','??? '),$buffer);???
??? return $buffer;???
}?????
???
/* your css files */???
include('galleria.css');???
include('articles.css');???
???
ob_end_flush();

使用办法如下:
代码如下:
<link href="compress.php" rel="stylesheet" type="text/css" /><span id="tester">test</span>

PHP教程2. 压缩js,利用jsmin类:

PHP教程本实例源自:http://code.google.com/p/minify/

代码如下:
header('Content-type: text/javascript');???
require 'jsmin.php';???
echo JSMin::minify(file_get_contents('common.js') . file_get_contents('common2.js'));

PHP教程其中jsmin.php文件如下:

代码如下:

<?php
/**
?* jsmin.php - PHP implementation of Douglas Crockford's JSMin.
?*
?* This is pretty much a direct port of jsmin.c to PHP with just a few
?* PHP-specific performance tweaks. Also,whereas jsmin.c reads from stdin and
?* outputs to stdout,this library accepts a string as input and returns another
?* string as output.
?*
?* PHP 5 or higher is required.
?*
?* Permission is hereby granted to use this version of the library under the
?* same terms as jsmin.c,which has the following license:
?*
?* --
?* Copyright (c) 2002 Douglas Crockford? (www.crockford.com)
?*
?* Permission is hereby granted,free of charge,to any person obtaining a copy of
?* this software and associated documentation files (the "Software"),to deal in
?* the Software without restriction,including without limitation the rights to
?* use,copy,modify,merge,publish,distribute,sublicense,and/or sell copies
?* of the Software,and to permit persons to whom the Software is furnished to do
?* so,subject to the following conditions:
?*
?* The above copyright notice and this permission notice shall be included in all
?* copies or substantial portions of the Software.
?*
?* The Software shall be used for Good,not Evil.
?*
?* THE SOFTWARE IS PROVIDED "AS IS",WITHOUT WARRANTY OF ANY KIND,EXPRESS OR
?* IMPLIED,INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
?* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
?* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER
?* LIABILITY,WHETHER IN AN ACTION OF CONTRACT,TORT OR OTHERWISE,ARISING FROM,
?* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
?* SOFTWARE.
?* --
?*
?* @package JSMin
?* @author Ryan Grove <ryan@wonko.com>
?* @copyright 2002 Douglas Crockford <douglas@crockford.com> (jsmin.c)
?* @copyright 2008 Ryan Grove <ryan@wonko.com> (PHP port)
?* @copyright 2012 Adam Goforth <aag@adamgoforth.com> (Updates)
?* @license http://opensource.org/licenses/mit-license.php MIT License
?* @version 1.1.2 (2012-05-01)
?* @link https://github.com/rgrove/jsmin-php
?*/
class 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;
? protected $a?????????? = '';
? protected $b?????????? = '';
? protected $input?????? = '';
? protected $inputIndex? = 0;
? protected $inputLength = 0;
? protected $lookAhead?? = null;
? protected $output????? = '';
? // -- Public Static Methods --------------------------------------------------
? /**
?? * Minify Javascript
?? *
?? * @uses __construct()
?? * @uses min()
?? * @param string $js Javascript to be minified
?? * @return string
?? */
? public static function minify($js) {
??? $jsmin = new JSMin($js);
??? return $jsmin->min();
? }
? // -- Public Instance Methods ------------------------------------------------
? /**
?? * Constructor
?? *
?? * @param string $input Javascript to be minified
?? */
? public function __construct($input) {
??? $this->input?????? = str_replace("rn",$input);
??? $this->inputLength = strlen($this->input);
? }
? // -- Protected Instance Methods ---------------------------------------------
? /**
?? * Action -- do something! What to do is determined by the $command argument.
?? *
?? * action treats a string as a single character. Wow!
?? * action recognizes a regular expression if it is preceded by ( or,or =.
?? *
?? * @uses next()
?? * @uses get()
?? * @throws JSMinException If parser errors are found:
?? *???????? - Unterminated string literal
?? *???????? - Unterminated regular expression set in regex literal
?? *???????? - Unterminated regular expression literal
?? * @param int $command One of class constants:
?? *????? ACTION_KEEP_A????? Output A. Copy B to A. Get the next B.
?? *????? ACTION_DELETE_A??? Copy B to A. Get the next B. (Delete A).
?? *????? ACTION_DELETE_A_B? Get the next B. (Delete B).
? */
? protected function action($command) {
??? switch($command) {
????? case self::ACTION_KEEP_A:
??????? $this->output .= $this->a;
????? case self::ACTION_DELETE_A:
??????? $this->a = $this->b;
??????? if ($this->a === "'" || $this->a === '"') {
????????? for (;;) {
??????????? $this->output .= $this->a;
??????????? $this->a?????? = $this->get();
??????????? if ($this->a === $this->b) {
????????????? break;
??????????? }
??????????? if (ord($this->a) <= self::ORD_LF) {
????????????? throw new JSMinException('Unterminated string literal.');
??????????? }
??????????? if ($this->a === '') {
????????????? $this->output .= $this->a;
????????????? $this->a?????? = $this->get();
??????????? }
????????? }
??????? }
????? case 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;
????????? for (;;) {
??????????? $this->a = $this->get();
??????????? if ($this->a === '[') {
????????????? /*
??????????????? inside a regex [...] set,which MAY contain a '/' itself. Example: mootools Form.Validator near line 460:
????????????????? 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'));
????????????? */
????????????? for (;;) {
??????????????? $this->output .= $this->a;
??????????????? $this->a = $this->get();
??????????????? if ($this->a === ']') {
??????????????????? break;
??????????????? } elseif ($this->a === '') {
????????????????? $this->output .= $this->a;
????????????????? $this->a?????? = $this->get();
??????????????? } elseif (ord($this->a) <= self::ORD_LF) {
????????????????? throw new JSMinException('Unterminated regular expression set in regex literal.');
??????????????? }
????????????? }
??????????? } elseif ($this->a === '/') {
????????????? break;
??????????? } elseif ($this->a === '') {
????????????? $this->output .= $this->a;
????????????? $this->a?????? = $this->get();
??????????? } elseif (ord($this->a) <= self::ORD_LF) {
????????????? throw new JSMinException('Unterminated regular expression literal.');
??????????? }
??????????? $this->output .= $this->a;
????????? }
????????? $this->b = $this->next();
??????? }
??? }
? }
? /**
?? * Get next char. Convert ctrl char to space.
?? *
?? * @return string|null
?? */
? protected function 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;
????? } else {
??????? $c = null;
????? }
??? }
??? if ($c === "r") {
????? return "n";
??? }
??? if ($c === null || $c === "n" || ord($c) >= self::ORD_SPACE) {
????? return $c;
??? }
??? return ' ';
? }
? /**
?? * Is $c a letter,digit,underscore,dollar sign,or non-ASCII character.
?? *
?? * @return bool
?? */
? protected function isAlphaNum($c) {
??? return ord($c) > 126 || $c === '' || preg_match('/^[w$]$/',$c) === 1;
? }
? /**
?? * Perform minification,return result
?? *
?? * @uses action()
?? * @uses isAlphaNum()
?? * @uses get()
?? * @uses peek()
?? * @return string
?? */
? protected function 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) {
????? switch ($this->a) {
??????? case ' ':
????????? if ($this->isAlphaNum($this->b)) {
??????????? $this->action(self::ACTION_KEEP_A);
????????? } else {
??????????? $this->action(self::ACTION_DELETE_A);
????????? }
????????? break;
??????? case "n":
????????? switch ($this->b) {
??????????? case '{':
??????????? case '[':
??????????? case '(':
??????????? case '+':
??????????? case '-':
??????????? case '!':
??????????? case '~':
????????????? $this->action(self::ACTION_KEEP_A);
????????????? break;
??????????? case ' ':
????????????? $this->action(self::ACTION_DELETE_A_B);
????????????? break;
??????????? default:
????????????? if ($this->isAlphaNum($this->b)) {
??????????????? $this->action(self::ACTION_KEEP_A);
????????????? }
????????????? else {
??????????????? $this->action(self::ACTION_DELETE_A);
????????????? }
????????? }
????????? break;
??????? default:
????????? switch ($this->b) {
??????????? case ' ':
????????????? if ($this->isAlphaNum($this->a)) {
??????????????? $this->action(self::ACTION_KEEP_A);
??????????????? break;
????????????? }
????????????? $this->action(self::ACTION_DELETE_A_B);
????????????? break;
??????????? case "n":
????????????? switch ($this->a) {
??????????????? case '}':
??????????????? case ']':
??????????????? case ')':
??????????????? case '+':
??????????????? case '-':
??????????????? case '"':
??????????????? case "'":
????????????????? $this->action(self::ACTION_KEEP_A);
????????????????? break;
??????????????? default:
????????????????? if ($this->isAlphaNum($this->a)) {
??????????????????? $this->action(self::ACTION_KEEP_A);
????????????????? }
????????????????? else {
??????????????????? $this->action(self::ACTION_DELETE_A_B);
????????????????? }
????????????? }
????????????? break;
??????????? default:
????????????? $this->action(self::ACTION_KEEP_A);
????????????? break;
????????? }
????? }
??? }
??? return $this->output;
? }
? /**
?? * Get the next character,skipping over comments. peek() is used to see
?? *? if a '/' is followed by a '/' or '*'.
?? *
?? * @uses get()
?? * @uses peek()
?? * @throws JSMinException On unterminated comment.
?? * @return string
?? */
? protected function next() {
??? $c = $this->get();
??? if ($c === '/') {
????? switch($this->peek()) {
??????? case '/':
????????? for (;;) {
??????????? $c = $this->get();
??????????? if (ord($c) <= self::ORD_LF) {
????????????? return $c;
??????????? }
????????? }
??????? case '*':
????????? $this->get();
????????? for (;;) {
??????????? switch($this->get()) {
????????????? case '*':
??????????????? if ($this->peek() === '/') {
????????????????? $this->get();
????????????????? return ' ';
??????????????? }
??????????????? break;
????????????? case null:
??????????????? throw new JSMinException('Unterminated comment.');
??????????? }
????????? }
??????? default:
????????? return $c;
????? }
??? }
??? return $c;
? }
? /**
?? * Get next char. If is ctrl character,translate to a space or newline.
?? *
?? * @uses get()
?? * @return string|null
?? */
? protected function peek() {
??? $this->lookAhead = $this->get();
??? return $this->lookAhead;
? }
}
// -- Exceptions ---------------------------------------------------------------
class JSMinException extends Exception {}
?>

PHP教程希望本文所述对大家的php程序设计有所赞助.

欢迎参与《PHP实战:php实现压缩多个CSS与JS文件的方法》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读