php实现的CSS更新类实例

本文实例讲述了php实现的CSS更新类及其用法,非常实用。分享给大家供大家参考。具体如下:

CSSUpdate.class.php类文件如下:

<?php
/** css 更新类,更新css文件内图片的版本
*  Date:  2013-02-05
*  Author: fdipzone
*  Ver:  1.1
*
*  Func:
*  update();
*
*  Ver:  1.1 增加search_child参数,可遍历子文件夹
*/ 

class CSSUpdate{ 

  private $csstmpl_path = null;
  private $css_path = null;
  private $replacetags = array();
  private $search_child = false;
  private $convert_num = 0;
  private $is_ready = 0; 

  /** 初始化
  * @param String $csstmpl_path css模版路径
  * @param String $css_path   css目标路径
  * @param Array  $replacetags 需要替换的图片类型
  * @param boolean $search_child 是否遍历子文件夹,默认false
  */
  public function __construct($csstmpl_path, $css_path, $replacetags=array(), $search_child=false){
    if(!is_dir($csstmpl_path) || !is_dir($css_path) || !$replacetags){
      $this->is_ready = 0;
    }else{
      $this->csstmpl_path = $csstmpl_path;
      $this->css_path = $css_path;
      $this->replacetags = $replacetags;
      $this->search_child = $search_child;
      $this->is_ready = 1;
    }
  } 

  /** 更新css文件 */
  public function update(){
    if($this->is_ready==0){
      $this->response('csstmpl or csspath or replacetags error');
      return '';
    }
    $this->traversing($this->csstmpl_path);
    $this->response('covert num:'.$this->convert_num);
  } 

  /** 遍历文件夹
  * @param String $path 文件路径
  */
  private function traversing($path){
    $handle = opendir($path);
    while(($file=readdir($handle))!==false){
      if($file!='..' && $file!='.'){
        $curfile = $path.'/'.$file; 

        if(is_dir($curfile)){  // folder
          if($this->search_child){  // 需要遍历子文件夹
            $this->traversing($curfile);
          }
        }elseif($this->checkExt($curfile)){ // css file
          $dfile = str_replace($this->csstmpl_path, $this->css_path, $curfile);
          $this->create($curfile, $dfile);
          $this->response($curfile.' convert to '.$dfile.' success');
          $this->convert_num ++;
        }
      }
    }
    closedir($handle);
  } 

  /** 检查文件后缀 */
  private function checkExt($file){
    $name = basename($file);
    $namefrag = explode('.', $name);
    if(count($namefrag)>=2){
      if(strtolower($namefrag[count($namefrag)-1])=='css'){ // css文件
        return true;
      }
    }
    return false;
  } 

  /** 替换模版内容,写入csspath
  * @param String $tmplfile 模版文件
  * @param String $dfile  目标文件
  */
  private function create($tmplfile, $dfile){
    $css_content = file_get_contents($tmplfile);
    foreach($this->replacetags as $tag){
      $css_content = str_replace($tag, $tag."?".date('YmdHis'), $css_content);
    }
    if(!is_dir(dirname($dfile))){  // 生成目标路径
      mkdir(dirname($dfile), 0755, true);
    }
    file_put_contents($dfile, $css_content, true);
  } 

  /** 输出 */
  private function response($content){
    echo $content."<br>";
  }
}
?>

demo示例程序如下:

<?php
require_once "CSSUpdate.class.php"; 

define('ROOT_PATH', dirname(__FILE__));
$css_path = ROOT_PATH.'/css';
$csstmpl_path = ROOT_PATH.'/csstmpl';
$replacetags = array('.png', '.jpg', '.gif'); 

$cssobj = new CSSUpdate($csstmpl_path, $css_path, $replacetags);
$cssobj->update();
?>

完整源码点击此处本站下载。

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

(0)

相关推荐

  • php不使用copy()函数复制文件的方法

    本文实例讲述了php不使用copy()函数复制文件的方法.分享给大家供大家参考.具体如下: 下面的代码不使用php内置的copy函数,直接通过文件读取写入的操作方式复制文件 <?php function copyfiles($file1,$file2){ $contentx =@file_get_contents($file1); $openedfile = fopen($file2, "w"); fwrite($openedfile, $contentx); fclose($o

  • PHP定时更新程序设计思路分享

    现在回想起来,我以前的想法是错误的,网页的执行流程 打开WEB页面 -- 加载HTML代码 (包括CSS,javascript)- 执行PHP代码 - 完成 粗约的就先理解成上面的这个样子. 我们都知道PHP做成服务器端的脚本,它是有超时设置的,可以通过 set_time_limit() 函数来处理.但这样处理PHP代码十分 消耗CPU资源.所以不建议通过循环处理PHP代码来实现. 一般的情况是用javascript来处理. 复制代码 代码如下: $(function(){    var tim

  • PHP 之 写时复制介绍(Copy On Write)

    在开始之前,我们可以先看一段简单的代码: 复制代码 代码如下: <?php   //例一     $foo = 1;     $bar = $foo;     echo $foo + $bar; ?> 执行这段代码,会打印出数字2.从内存的角度来分析一下这段代码"可能"是这样执行的:分配一块内存给foo变量,里面存储一个1: 再分配一块内存给bar变量,也存一个1,最后计算出结果输出.事实上,我们发现foo和bar变量因为值相同,完全可以使用同一块内存,这样,内存的使用就节

  • PHP中copy on write写时复制机制介绍

    什么是写时复制(Copy On Write)? 答:在复制一个对象的时候并不是真正的把原先的对象复制到内存的另外一个位置上,而是在新对象的内存映射表中设置一个指针,指向源对象的位置,并把那块内存的Copy-On-Write位设置为1.这样,在对新的对象执行读操作的时候,内存数据不发生任何变动,直接执行读操作:而在对新的对象执行写操作时,将真正的对象复制到新的内存地址中,并修改新对象的内存映射表指向这个新的位置,并在新的内存位置上执行写操作. 这个技术需要跟虚拟内存和分页同时使用,好处就是在执行复

  • PHP更新购物车数量(表单部分/PHP处理部分)

    表单部分: 复制代码 代码如下: <form action="?action=edit_num" method="post" name="car<?php $c_rs['id'];?>" id="car<?php $c_rs['id'];?>"> <input name="suliang[<?php echo $c_rs['sp_id'];?>]" ty

  • PHP中调用SVN命令更新网站方法

    想说写一个通过网页就可以执行 SVN 升级的程序,结果并不是我想得那样简单,有一些眉角需要注意的说. 先以 Apache 的用户帐号执行 SVN checkout,这样 Apache 才有 SVN 的链结权力,才可以通过网页执行 SVN update 复制代码 代码如下: su -s /bin/bash www-data    cd /var/www    svn checkout http://www.xxx.com/svn/my_site 在用 PHP 执行 shell 指令前要加上 exp

  • php使用COPY函数更新配置文件的方法

    本文实例讲述了php使用COPY函数更新配置文件的方法.分享给大家供大家参考.具体如下: _saveconfig.php文件如下: <?php /* * File: _saveconfig.php * * Modified: 2010-7-11 * By:liulang * 说明:涉及到两个文件:_saveconfig.php和config.php当对后台的一些全局配置变量进行更新时, * 就更改后台的config.php然后通过这个文件更改前台的config.php文件(前后台文件都一样),

  • php强制更新图片缓存的方法

    本文实例讲述了php强制更新图片缓存的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /** 強制更新圖片緩存 *   @param Array $files 要更新的圖片 *   @param int $version 版本 */  function force_reload_file($files=array(), $version=0){      $html = '';      if(!isset($_COOKIE['force_reload_page_'.$ve

  • php实现的CSS更新类实例

    本文实例讲述了php实现的CSS更新类及其用法,非常实用.分享给大家供大家参考.具体如下: CSSUpdate.class.php类文件如下: <?php /** css 更新类,更新css文件内图片的版本 * Date: 2013-02-05 * Author: fdipzone * Ver: 1.1 * * Func: * update(); * * Ver: 1.1 增加search_child参数,可遍历子文件夹 */ class CSSUpdate{ private $csstmpl_

  • Asp.Net中Cache操作类实例详解

    本文以一个Asp.Net的Cache操作类实例代码来详细描述了cache缓存的结构及实现方法,完整代码如下所示: /// <head> /// <function> /// 存储类(存储UserInfo信息) /// </function> /// <description> /// 用Cache存储用户信息 /// 在指定间隔(TimeOut)内取,则可以从Cache中取, /// 如果超出存储时间,则从数据库取用户信息数据 /// 作為所有用户信息的存儲

  • C# Oracle数据库操作类实例详解

    本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长度等,同时还有哈稀表自动插入数据库等高级任务.需要特别指出的是:在执行SQL语句,返回 DataReader之前一定要先用.read()打开,然后才能读到数据,再用hashTable对数据库进行insert,update,del操作,注意此时只能用默认的数据库连接"connstr". 完整

  • AsyncTask类实例详解

    AsyncTask也叫做"异步任务",是一个抽象类 AsyncTask约定了在子线程中执行任务的抽象方法,开发者可以在自定义AsyncTask的实现类中重写该方法, 则AsyncTask在工作时会自动开启子线程执行相关代码 AsyncTask类的声明: public abstract class AsyncTask<Param,Progress,Result> Param 执行异步任务后,需要参数的数据类型 Progress 执行异步任务过程中,标识进度的数据类型 Resu

  • Java语言描述MD5加密工具类实例代码

    编程中经常有用到MD5加密的情况,Java语言并没有像PHP一样提供原生的MD5加密字符串的函数,需要MD5加密的时候,往往需要自己写. 代码如下: import java.security.MessageDigest; public class MD5 { //公盐 private static final String PUBLIC_SALT = "demo" ; //十六进制下数字到字符的映射数组 private final static String[] hexDigits =

  • Pytorch中的自动求梯度机制和Variable类实例

    自动求导机制是每一个深度学习框架中重要的性质,免去了手动计算导数,下面用代码介绍并举例说明Pytorch的自动求导机制. 首先介绍Variable,Variable是对Tensor的一个封装,操作和Tensor是一样的,但是每个Variable都有三个属性:Varibale的Tensor本身的.data,对应Tensor的梯度.grad,以及这个Variable是通过什么方式得到的.grad_fn,根据最新消息,在pytorch0.4更新后,torch和torch.autograd.Variab

  • JavaScript+CSS相册特效实例代码

    嗯 就是这样一个例子,视频学到的一个特效,实际用处并不大,但是可以帮助理解JS语言和熟悉CSS3样式. 设计: 观察一张图片的变化,发现: 1.图片缩放(随机,并且不是同时运动) 1.从大到小 2.从小到大,透明度从1到0(在第一步运动完成后立马开始) 2.图片旋转(随机,并且不是同时运动的.需要在全部运动走完以后开始) 3. 因为每张图片是随机开始变换的,所以起始时间是不同的,这里可设置一个延迟器setTimeout,时间用random随机生成即可. 4. 中间需要用到自执行函数,因为setT

  • Android常用正则表达式验证工具类(实例代码)

    东西不多,但一般项目够用了. public class RegularUtil { //身份证 public static final String REGEX_ID_CARD = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$"; //验证邮箱 public static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\

  • Ruby类实例变量、类实例方法和类变量、类方法的区别

    在Ruby中类实例变量.类实例方法和类变量.类方法的区别比较微妙,而且用法也有相当的区别.本文探讨一下他们的定义和基本的使用场景,以抛砖引玉...   一.类实例变量和类变量   类变量大家都很熟悉了,就是在类定义中用@@开头的变量.类变量是用于存储类的全局信息,它只属于类,不同与类实例变量(即用@开头定义的变量)每一个类的对象都有一份数据. 类变量是可以被继承的,也就是说如果我们派生一个子类,那么在子类中是可以访问父类的类变量的.子类和父类共享一份数据,对一个类的修改会反映到另一个类中.如下边

  • HttpUtils 发送http请求工具类(实例讲解)

    废话不多说,直接上代码 import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFac

随机推荐