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加速的eAccelerator dll支持文件打包下载
Sep 30 PHP
php 数组二分法查找函数代码
Feb 16 PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
php实现telnet功能示例
Apr 08 PHP
跟我学Laravel之视图 &amp; Response
Oct 15 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
Jun 10 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
PHP中创建和编辑Excel表格的方法
Sep 13 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 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
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
python3抓取中文网页的方法
2015/07/28 Python
用Python设计一个经典小游戏
2017/05/15 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
python语言基本语句用法总结
2019/06/11 Python
Python中的延迟绑定原理详解
2019/10/11 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Python如何定义接口和抽象类
2020/07/28 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL