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 相关文章推荐
一个目录遍历函数
Oct 09 PHP
加速XP搜索功能堪比vista
Mar 22 PHP
PHP如何编写易读的代码
Jul 10 PHP
网友原创的PHP模板类代码
Sep 07 PHP
PHP学习 变量使用总结
Mar 24 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
php模板引擎技术简单实现
Mar 15 PHP
Yii2 GridView实现列表页直接修改数据的方法
May 16 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
PHP实现的折半查找算法示例
Dec 19 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扩展图文教程
2008/12/12 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
PHP echo()函数讲解
2019/02/15 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python中去空格函数的用法
2014/08/21 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
python web框架中实现原生分页
2019/09/08 Python
dpn网络的pytorch实现方式
2020/01/14 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
500行python代码实现飞机大战
2020/04/24 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
Python 爬虫的原理
2020/07/30 Python
python 线程的五个状态
2020/09/22 Python
python中的unittest框架实例详解
2021/02/05 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
电子商务专业实习生自我鉴定
2013/09/24 职场文书
西安交大自主招生自荐信
2014/01/27 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
少先队活动总结
2014/08/29 职场文书
美丽的大脚观后感
2015/06/03 职场文书
汶川大地震感悟
2015/08/10 职场文书