栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

php实现压缩合并js的方法

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

php实现压缩合并js的方法

本文实例讲述了php实现压缩合并js的方法。分享给大家供大家参考,具体如下:

test.php文件如下:

require_once('jsmin.php');
$files = glob("js
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 --------------------------------------------------
 
 public static function minify($js) {
  $jsmin = new JSMin($js);
  return $jsmin->min();
 }
 // -- Public Instance Methods ------------------------------------------------
 
 public function __construct($input) {
  $this->input    = str_replace("rn", "n", $input);
  $this->inputLength = strlen($this->input);
 }
 // -- Protected Instance Methods ---------------------------------------------
 
 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 === '[') {

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();
    }
  }
 }
 
 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 ' ';
 }
 
 protected function isAlphaNum($c) {
  return ord($c) > 126 || $c === '\' || preg_match('/^[w$]$/', $c) === 1;
 }
 
 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;
 }
 
 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;
 }
 
 protected function peek() {
  $this->lookAhead = $this->get();
  return $this->lookAhead;
 }
}
// -- Exceptions ---------------------------------------------------------------
class JSMinException extends Exception {}
?>

完整实例代码点击此处本站下载

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP目录操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/42580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号