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 相关文章推荐
php5中类的学习
Mar 28 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
php购物车实现方法
Jan 03 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
PHP中trait使用方法详细介绍
May 21 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
php实现的PDO异常处理操作分析
Dec 27 PHP
基于laravel缓冲cache的用法详解
Oct 23 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 EOT定界符的使用详解
2008/09/30 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
Python从Excel中读取日期一列的方法
2018/11/28 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
基于python中__add__函数的用法
2019/11/25 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
超30万乐谱下载:Musicnotes.com
2016/09/24 全球购物
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
婚礼主持词
2014/03/13 职场文书