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分页显示制作详细讲解
Nov 19 PHP
php 购物车的例子
May 04 PHP
php 多个submit提交表单 处理方法
Jul 07 PHP
定义php常量的详解
Jun 09 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
php5.x禁用eval的操作方法
Oct 19 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
详解Laravel框架的依赖注入功能
May 27 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 正则匹配函数体
2009/08/25 PHP
PHP反射API示例分享
2016/10/08 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
2015/02/20 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
python处理圆角图片、圆形图片的例子
2014/04/25 Python
python try except 捕获所有异常的实例
2018/10/18 Python
python 处理string到hex脚本的方法
2018/10/26 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
Python脚本调试工具安装过程
2021/01/11 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
家具厂厂长岗位职责
2014/01/01 职场文书
电视购物广告词
2014/03/19 职场文书
2015年加油站工作总结
2015/05/13 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
React Fragment介绍与使用详解
2021/11/11 Javascript