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作的文本留言本的例子(四)
Oct 09 PHP
《PHP边学边教》(01.开篇――准备工作)
Dec 13 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
一个简洁的PHP可逆加密函数(分享)
Jun 06 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
php判断当前操作系统类型
Oct 28 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
Yii框架where查询用法实例分析
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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
第七节 类的静态成员 [7]
2006/10/09 PHP
php str_pad 函数使用详解
2009/01/13 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
Vue Components 数字键盘的实现
2019/09/18 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
python对excel文档去重及求和的实例
2018/04/18 Python
在双python下设置python3为默认的方法
2018/10/31 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
酷瑞网络科技面试题
2012/03/30 面试题
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
招聘专员岗位职责
2014/03/07 职场文书
买卖协议书范本
2014/04/21 职场文书
干部鉴定材料
2014/05/18 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
主持人开场白台词
2015/05/29 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
千万级用户系统SQL调优实战分享
2022/03/03 MySQL