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读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
php数字运算验证码的实现代码
Jul 30 PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
php文件管理基本功能简单操作
Jan 16 PHP
php实现的错误处理封装类实例
Jun 20 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
Laravel配置全局公共函数的方法步骤
May 09 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中将网页导出为Word文档的代码
2012/05/25 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
js格式化时间的方法
2015/12/18 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
Windows下python2.7.8安装图文教程
2016/05/26 Python
Mac 上切换Python多版本
2017/06/17 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
机器学习python实战之决策树
2017/11/01 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
python创建文件备份的脚本
2018/09/11 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
公司年会演讲稿范文
2014/01/11 职场文书
环保建议书500字
2014/05/14 职场文书
授权委托书格式
2014/07/31 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
学雷锋活动简报
2015/07/20 职场文书
微信早安问候语
2015/11/10 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL