frename PHP 灵活文件命名函数 frename


Posted in PHP onSeptember 09, 2009

对付这种情况,有的做法是用时间戳对新文件进行重新命名,有的是用序号递增的方法,为了解决麻烦的操作,我在最近编写了一个frename函数,可以灵活依据自定义的规则取得上传文件的新命名,特此分享。

<?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 '<br />序号递增规则:' . frename(__FILE__, '{name}{n}'); 
echo '<br />n个前导0的序号递增规则:' . frename(__FILE__, '{name}{5n}'); 
echo '<br />用分隔符<span style="color: #E00;">_</span>并带有3个前导0的序号递增规则:' . frename(__FILE__, '{3n}<_>{name}'); 
echo '<br />使用时间日期元素组合的规则:' . frename(__FILE__, '{y}_{m}_{d}_{h}_{i}_{s}'); 
echo '<br />使用简写形式的时间日期元素组合的规则:' . frename(__FILE__, '{Y}_{M}_{D}_{H}_{i}_{s}'); 
echo '<br />其他自定义组合:' . 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, $Y, $m, $M, $d, $D, $h, $H, $i, $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 (file_exists($file)) return false; 
else return $path . $tempname . $suffix; 
} 
} 
echo '默认规则(时间戳):' . frename(__FILE__); 
echo '<br />序号递增规则:' . frename(__FILE__, '{name}{n}'); 
echo '<br />n个前导0的序号递增规则:' . frename(__FILE__, '{name}{5n}'); 
echo '<br />用分隔符<span style="color: #E00;">_</span>并带有3个前导0的序号递增规则:' . frename(__FILE__, '{3n}<_>{name}'); 
echo '<br />使用时间日期元素组合的规则:' . frename(__FILE__, '{y}_{m}_{d}_{h}_{i}_{s}'); 
echo '<br />使用简写形式的时间日期元素组合的规则:' . frename(__FILE__, '{Y}_{M}_{D}_{H}_{i}_{s}'); 
echo '<br />其他自定义组合:' . frename(__FILE__, '{timestamp}_{name}<_>{n}'); 
?>
PHP 相关文章推荐
如何在PHP中使用Oracle数据库(5)
Oct 09 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
Mar 18 PHP
PHP下载远程文件到本地存储的方法
Mar 24 PHP
php对数组内元素进行随机调换的方法
May 12 PHP
DEDECMS首页调用图片集里的多张图片
Jun 05 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
php递归实现无限分类的方法
Jul 28 PHP
PHP开发之用微信远程遥控服务器
Jan 25 PHP
PHP命名空间简单用法示例
Dec 28 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
PHPLog php 程序调试追踪工具
Sep 09 #PHP
php 从数据库提取二进制图片的处理代码
Sep 09 #PHP
封装一个PDO数据库操作类代码
Sep 09 #PHP
PHP 数组遍历顺序理解
Sep 09 #PHP
PHP 裁剪图片成固定大小代码方法
Sep 09 #PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
Sep 09 #PHP
PHP 危险函数全解析
Sep 09 #PHP
You might like
ZF等常用php框架中存在的问题
2008/01/10 PHP
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
python发送告警邮件脚本
2018/09/17 Python
解决Django中多条件查询的问题
2019/07/18 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
社区学习十八大感想
2014/01/22 职场文书
招聘专员岗位职责
2014/03/07 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
机械专业求职信范文
2014/07/15 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
保险内勤岗位职责
2015/04/13 职场文书
西柏坡观后感
2015/06/08 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书