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 相关文章推荐
linux iconv方法的使用
Oct 01 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
php计算十二星座的函数代码
Aug 21 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
解决yii2左侧菜单子级无法高亮问题的方法
May 08 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
Jul 14 PHP
基于swoole实现多人聊天室
Jun 14 PHP
php实例化一个类的具体方法
Sep 19 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
深入浅析php json 格式控制
2015/12/24 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
对python中的logger模块全面讲解
2018/04/28 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
雅诗兰黛旗下专业男士保养领导品牌:Lab Series
2017/05/15 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
行政助理的职责
2013/11/14 职场文书
启动仪式策划方案
2014/06/14 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
人事主管岗位职责
2015/02/04 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫