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 相关文章推荐
利用static实现表格的颜色隔行显示的代码
Sep 02 PHP
Wordpress php 分页代码
Oct 21 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
Jan 08 PHP
PHP中如何防止外部恶意提交调用ajax接口
Apr 11 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
php简单生成一组与多组随机字符串的方法
May 09 PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 PHP
PHP 对象继承原理与简单用法示例
Apr 21 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中一个控制字符串输出的函数
2006/10/09 PHP
php google或baidu分页代码
2009/11/26 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
python实现银行实战系统
2020/02/26 Python
浅谈Python 命令行参数argparse写入图片路径操作
2020/07/12 Python
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
周年庆典邀请函范文
2014/01/24 职场文书
安卓程序员求职信
2014/02/28 职场文书
应聘护士求职信
2014/07/21 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
实习计划书范文
2015/01/16 职场文书
财务经理岗位职责
2015/01/31 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
毕业实习感受与体会
2015/05/26 职场文书
小学校本教研总结
2015/08/13 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
把77A收信机改造成收音机
2022/04/05 无线电