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 iconv 解决utf-8和gb2312编码转换问题
Apr 12 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
PHP反向代理类代码
Aug 15 PHP
php常用hash加密函数
Nov 22 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
PHP中使用curl伪造IP的简单方法
Aug 07 PHP
解析WordPress中的post_class与get_post_class函数
Jan 04 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 PHP
PHP生成图表pChart的示例解析
Jul 31 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 smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
PyQt5响应回车事件的方法
2019/06/25 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
幼儿园教师辞职信
2014/01/18 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
消防验收申请报告
2015/05/15 职场文书
读书笔记格式
2015/07/02 职场文书
贷款担保书范本
2015/09/22 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js
python语言中pandas字符串分割str.split()函数
2022/08/05 Python