<?php
//文件上传时分析路径信息
//author:songzhenghe 2014-1-24
//version 0.1
class path_ana {
    private $data_root;
    private $web_root;
    private $http_domain;
    private $file;
    private $r;
     
    public function __construct(){
        //从配置文件中读取
        $this->data_root='E:/wwwroot2/cms/common/upload/';
        $this->web_root ='E:/wwwroot2/cms/';
        $this->http_domain='http://www.cms.com/';
        $this->r=null;
    }
    //$file E:/wwwroot2/cms/common/upload/2013/08/345349534.jpg
    public function init($file){
        $this->file=$file;
        $return=array();
         
        $pathinfo=pathinfo($file);
        // E:/wwwroot2/cms/common/upload/2013/08/
        $return[0]=$pathinfo['dirname'].'/';
        // 345349534.jpg
        $return[1]=$pathinfo['basename'];
        // 345349534
        if(strrpos($return[1],'.')!==false){
            $return[2]=substr($return[1],0,strrpos($return[1],'.'));
        }else{
            $return[2]=$return[1];
        }
        // jpg
        $return[3]=$pathinfo['extension'];
        // 2013/08/345349534.jpg
        $return[4]=$this->str_replace_once($this->data_root,'',$file);
        // 2013/08/
        $return[5]=dirname($return[4]).'/';
        // E:/wwwroot2/cms/common/upload/
        $return[6]=$this->data_root;
        // common/upload/2013/08/345349534.jpg
        $return[7]=$this->str_replace_once($this->web_root,'',$file);
        // common/upload/2013/08/
        $return[8]=dirname($return[7]).'/';
        // E:/wwwroot2/cms/
        $return[9]=$this->web_root;
        // common/upload/
        $return[10]=preg_replace('/'.preg_quote($return[5],'/').'$/i','',$return[8],1);
        $return[11]=$this->http_domain.$return[7];
        // /common/upload/2013/08/345349534.jpg
        $return[12]='/'.$return[7];
        //  E:/wwwroot2/cms/common/upload/2013/08/345349534.jpg
        $return[13]=$this->file;
         
        $this->r=$return;
        return $return;
    }
    private function str_replace_once($needle,$replace,$haystack) {
        $pos=strpos($haystack,$needle);
        if ($pos===false) return $haystack;
        return substr_replace($haystack,$replace,$pos,strlen($needle));
    }
    //
    public function rename_file($prefix='thumb_',$suffix=''){
        if($this->r[3]){
            $new=$this->r[0].$prefix.$this->r[2].$suffix.'.'.$this->r[3];
        }else{
            $new=$this->r[0].$prefix.$this->r[2].$suffix;
        }
        return $new;
    }
     
//
}
echo '<pre>';
$file='E:/wwwroot2/cms/common/upload/2013/08/345349534.jpg';
$path_ana=new path_ana();
$r=$path_ana->init($file);
print_r($r);
 
$file=$path_ana->rename_file();
$r=$path_ana->init($file);
print_r($r);
Array
(
[0] => E:/wwwroot2/cms/common/upload/2013/08/
[1] => 345349534.jpg
[2] => 345349534
[3] => jpg
[4] => 2013/08/345349534.jpg
[5] => 2013/08/
[6] => E:/wwwroot2/cms/common/upload/
[7] => common/upload/2013/08/345349534.jpg
[8] => common/upload/2013/08/
[9] => E:/wwwroot2/cms/
[10] => common/upload/
[11] => http://www.cms.com/common/upload/2013/08/345349534.jpg
[12] => /common/upload/2013/08/345349534.jpg
[13] => E:/wwwroot2/cms/common/upload/2013/08/345349534.jpg
)

php 文件上传缩略图路径分析类的更多相关文章

  1. Spring MVC文件上传下载工具类

    import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import ...

  2. 文件上传: FileItem类、ServletFileUpload 类、DiskFileItemFactory类

    文件上传: ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中, 在使用ServletFileUpload对象解析请求时需要根据DiskFi ...

  3. SFTP 文件上传下载工具类

    SFTPUtils.java import com.jcraft.jsch.*; import com.jcraft.jsch.ChannelSftp.LsEntry; import lombok.e ...

  4. tp5下的文件上传与下载类

    class FieldInterfun extends Controller { /** * [upload 上传文件] * @param [type] $file [description] * @ ...

  5. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

  6. struts2实现文件上传(多文件上传)及下载

    一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...

  7. 【Java EE 学习 72 上】【数据采集系统第四天】【增加调查logo】【文件上传】【动态错误页指定】【上传限制】【国际化】

    增加logo的技术点:文件上传,国际化 文件上传的功能在struts2中是使用文件上传拦截器完成的. 1.首先需要在页面上添加一个文件上传的超链接. 点击该超链接能够跳转到文件上传页面.我给该表单页面 ...

  8. chunkupload 文件上传断点续传组件(java) - 正式发布

    chunkupload简介 chunkupload是一款基于java语言的断点续传组件,针对文件上传,非文件下载,集成方便,使用简单. chunkupload实现如下功能: ·  实现断点续传 ·  ...

  9. 我心中的核心组件(可插拔的AOP)~分布式文件上传组件~基于FastDFS

    回到目录 一些概念 在大叔框架里总觉得缺点什么,在最近的项目开发中,终于知道缺什么了,分布式文件存储组件,就是缺它,呵呵,对于分布式文件存储来说,业界比较公认的是FastDFS组件,它自己本身就是集群 ...

随机推荐

  1. 微信公众平台OAuth2.0授权

    1. 配置授权回调页面域名 进入微信公众平台后台后,依次进入开发者中心-权限表,找到网页授权获取用户基本信息,点击右侧的修改. 授权回调域名配置规范为全域名并且不带http,比如需要网页授权的域名为: ...

  2. js数组去重的方法(转)

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  3. T440安装Win7系统

    于T440自带的是Win8系统,硬盘格式为GPT分区格式,而Win7必须要MRP格式,所以必须要将硬盘格式从GPT修改为MRP,方法如下: 准备工作,下载”电脑店U盘启动盘制作工具“(百度一下,去官网 ...

  4. [WHY]Hello, Worktile~

    本来是水水的去听一听云计算大会,感受一下氛围的, 万万没想到,竟然意外的參观了Worktile,这也成了北京之旅最值得纪念的记忆. 先是路上看到QQ有个好友请求,备注是Worktile市场的小泽. 从 ...

  5. 1026. [SCOI2009]windy数【数位DP】

    Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? I ...

  6. 【CF917D】Stranger Trees

    题目 看题解的时候才突然发现\(zky\)讲过这道题啊,我现在怕不是一个老年人了 众所周知矩阵树求得是这个 \[\sum_{T}\prod_{e\in T}w_e\] 而我们现在的这个问题有些鬼畜了, ...

  7. 多线程之并发容器ConcurrentHashMap

    这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步 ...

  8. Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'getUser' in class org.uncommons.reportng.ReportMetadata threw exception class java.net.UnknownHostException :

    Running TestSuite [TestNG] [WARN] Ignoring duplicate listener : org.uncommons.reportng.HTMLReporter ...

  9. PAT乙级1007

    1007 素数对猜想 (20 分) 让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数.显然有d​1​​=1,且对于n>1有d​n​​是偶数.“素数对猜想 ...

  10. BUAA_OO第一单元总结性博客作业——表达式求导

    一.程序设计思路 在我的三次作业中都采用了类的分层结构,采用逐项匹配,分层求导的思路. (一). 第一次作业中构建了Polynimial(多项式)类,在类的构造器中就完成了对非法空格的判断并对合法表达 ...