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存储过程
Oct 09 PHP
使用php实现快钱支付功能(涉及到接口)
Jul 01 PHP
PHP 快速排序算法详解
Nov 10 PHP
Yii实现自动加载类地图的方法
Apr 01 PHP
PHP使用反射机制实现查找类和方法的所在位置
Apr 22 PHP
Joomla简单判断用户是否登录的方法
May 04 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 PHP
老生常谈文本文件和二进制文件的区别
Feb 27 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 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
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
文本框回车提交与禁止提交示例
2013/09/27 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python深入学习之上下文管理器
2014/08/31 Python
Zabbix实现微信报警功能
2016/10/09 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
python多线程使用方法实例详解
2019/12/30 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
大学竞选班干部演讲稿
2014/08/21 职场文书
Python pyecharts绘制条形图详解
2022/04/02 Python