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 相关文章推荐
BBS(php &amp; mysql)完整版(七)
Oct 09 PHP
php木马攻击防御之道
Mar 24 PHP
php,ajax实现分页
Mar 27 PHP
PHP之数组学习
May 29 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
基于xcache的配置与使用详解
Jun 18 PHP
PHP小教程之实现链表
Jun 09 PHP
11个PHPer必须要了解的编程规范
Sep 22 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
Mar 18 PHP
PHP与Java对比学习日期时间函数
Jul 03 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
PHP array_shift()用法实例分析
Jan 07 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
PHP Cookie的使用教程详解
2013/06/03 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
golang与PHP输出excel示例
2016/07/22 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
Django卸载之后重新安装的方法
2017/03/15 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
python保留小数位的三种实现方法
2020/01/07 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
10个顶级Python实用库推荐
2021/03/04 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
毕业生自荐信如何写
2014/03/24 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
幼儿学前班评语
2014/12/29 职场文书