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生成静态页面教程
Jan 10 PHP
深入PHP FTP类的详解
Jun 13 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
php中chdir()函数用法实例
Nov 13 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
Aug 11 PHP
php进行md5加密简单实例方法
Sep 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
phpmail类发送邮件函数代码
2012/02/20 PHP
Javascript 高阶函数使用介绍
2015/06/15 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
大学本科毕业生的自我鉴定
2013/11/26 职场文书
公司运动会策划方案
2014/05/25 职场文书
商铺租房协议书范本
2014/12/04 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
2015年工程部工作总结
2015/04/30 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
Golang二维数组的使用方式
2021/05/28 Golang
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
redis数据结构之压缩列表
2022/03/21 Redis
nginx共享内存的机制详解
2022/03/21 Servers