对付这种情况,有的做法是用时间戳对新文件进行重新命名,有的是用序号递增的方法,为了解决麻烦的操作,我在最近编写了一个frename函数,可以灵活依据自定义的规则取得上传文件的新命名,特此分享。 <div class="codetitle"><a style="CURSOR: pointer" data="52305" class="copybut" id="copybut52305" onclick="doCopy('code52305')"> 代码如下:<div class="codebody" id="code52305"> <?php function frename($file,$rule='{timestamp}',$force = true) { / ----------------------- author: m35 date: 2009/8/11 依据命名规则取得文件的新命名,以处理上传文件等操作时遇到的文件名已存在的情况 @parm1 $file -- 文件物理路径 @parm2 $rule -- 命名规则,默认为时间戳 @parm3 $force -- 是否强制命名,如果是强制,就算该目标文件不存在也会对其进行命名,默认强制 retrun str -- 依据$rule命名的新文件路径 示例: echo '默认规则(时间戳):' . frename(FILE); echo ' 序号递增规则:' . frename(FILE,'{name}{n}'); echo ' n个前导0的序号递增规则:' . frename(FILE,'{name}{5n}'); echo ' 用分隔符<span style="color: #E00;">并带有3个前导0的序号递增规则:' . frename(FILE,'{3n}<>{name}'); echo ' 使用时间日期元素组合的规则:' . frename(FILE,'{y}{m}{d}{h}{i}{s}'); echo ' 使用简写形式的时间日期元素组合的规则:' . frename(FILE,'{Y}{M}{D}{H}{i}{s}'); echo ' 其他自定义组合:' . frename(FILE,'{timestamp}{name}<>{n}'); ----------------------- / if (!$force && !file_exists($file)) return $file; $filename = basename($file); $path = str_replace($filename,'',$file); $suffix = substr($filename,strrpos($filename,'.')); $name = str_replace($suffix,$filename); $timestamp = time(); list($y,$Y,$m,$M,$d,$D,$h,$H,$i,$s) = explode(',',date('Y,y,m,n,d,j,h,G,i,s')); $tempname = str_replace( array('{name}','{timestamp}','{y}','{Y}','{m}','{M}','{d}','{D}','{h}','{H}','{i}','{s}'), array($name,$timestamp,$y,$s), $rule ); if (preg_match('/{(d?)n}/',$rule,$n)) { preg_match('/<([^>]+)>/',$tempname,$sep); $file = $path . str_replace(array($n[0],$sep[0]),array('',''),$tempname) . $suffix; if (!file_exists($file)) return $file; $tempname = str_replace($sep[0],$sep[1],$tempname); $tname = $tempname; $i = 1; do { $nn = sprintf("%0{$n[1]}s",$i); $tempname = str_replace($n[0],$nn,$tname); $file = $path . $tempname . $suffix; } while (file_exists($file)); return $file; } else { $file = $path . $tempname . $suffix; if (fileexists($file)) return false; else return $path . $tempname . $suffix; } } echo '默认规则(时间戳):' . frename(FILE); echo ' 序号递增规则:' . frename(FILE,'{timestamp}{name}<_>{n}'); ?>
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|