frename PHP 灵活文件命名函数 frename

前端之家收集整理的这篇文章主要介绍了frename PHP 灵活文件命名函数 frename前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对付这种情况,有的做法是用时间戳对新文件进行重新命名,有的是用序号递增的方法,为了解决麻烦的操作,我在最近编写了一个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}');
?>

猜你在找的PHP相关文章