php新建文件自动编号的思路与实现


Posted in PHP onJune 27, 2011

要求:在系统中 在新建文件是可以实现自动编号。比如新建文本文件 默认文件名是:新建 文本文档.txt,如果继续新建时文件名自动变了:新建 文本文档 (2).txt, 以后就是 3,4,5….请问这种算法用PHP怎么实现。
思路,原来想用循环来做,后来想想,用计数器递增吧,简单高效,这个TME可以是数据库,可以文件,可以是配置文件,看你怎么做了,循环只是在维护的时候使用的,如果每建一个新文件也得循环一次,那得累死,缓存无处不在

<?php 
$dir="/web/csp/images/test/"; 
if(!file_exists($dir.'cache.txt')){ 
file_put_contents($dir.'cache.txt',1); 
file_put_contents($dir.'新建文件.txt',''); 
}else{ 
$num = file_get_contents($dir.'cache.txt'); 
$num ++ ; 
$name = '新建文件 ('.$num.').txt'; 
file_put_contents($dir.'cache.txt',$num); 
file_put_contents($dir.$name,''); 
}?>

银子童鞋重写后的
<?php 
function createFile($filename, $content = '') 
{ 
if(file_exists($filename . '.tmp')) 
{ 
$num = (int) file_get_contents($filename . '.tmp') + 1; 
$fileinfo = pathinfo($filename); 
file_put_contents($fileinfo['filename'] . '(' . $num . ').' .$fileinfo['extension'], $content); 
file_put_contents($filename . '.tmp', $num); 
} 
else 
{ 
file_put_contents($filename, $content); 
file_put_contents($filename . '.tmp', 1); 
} 
} 
createFile('test.txt'); 
?>

第三种,循环的
<?php $files = scandir('.'); //此代码在web根目录下写就 
$num = 0; 
$str = '新建 文本文档'; 
foreach ($files as $k=> $file) { 
if (is_file($file) && preg_match('/(.*)\((\d+)\)\.txt/', $file, $matched)) { 
$num = $matched[2]>$num ? $matched[2] : $num; 
} 
} 
$filename = $num == 0 ? $str . '(1).txt' : $str . '(' . ($num+1) . ').txt'; 
if (fopen($filename, 'w')) { 
echo '成功创建文件:' . $filename; 
} 
?>

以下是网友的回复:
1.关于第一段代码的.
在自动新建几个文件之后,
比如:现在的新建出来的文件有
新建文件.txt
新建文件 (2).txt
新建文件 (3).txt
这三个文件,如果这个时候删除了
新建文件 (2).txt
新建文件 (3).txt
这两个,然后再执行那个PHP,因为Cache.txt计数的问题,再执行的时候新建的文件是
新建文件 (4).txt
并没有智能的根据序列创建.
而上面的操作,在Windows下的结果 新建出来的文件名应该是
新建文件 (2).txt

2.关于第二段的.
首先,肯定也存在上面的问题,而更为严重的是,创建出来的文件,文件名与扩展名的 . 分隔符丢了..
即:
test.txt
test(2)txt
test(3)txt
test(4)txt
究其原因是因为,在组合文件名的时候.没有把扩展名的点给加上去.

file_put_contents($fileinfo['filename'] . '(' . $num . ')' .$fileinfo['extension'], $content);

来段更好玩的,更短的.
效率应该会比上面的使用缓存(tmp文件)或者正则(preg_match)的好很多.

<?php 
$prefix = '新建 文本文档'; 
$suffix = '.txt'; 
$t = $prefix.$suffix;//新建 文本文档.txt 
$i = 1; 
while(file_exists($t)){//新建 文本文档(\d+).txt 
$t = $prefix.'('.++$i.')'.$suffix; 
} 
fclose(fopen($t, 'w')); 
?>
PHP 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
PHP脚本数据库功能详解(下)
Oct 09 PHP
php5 apache 2.2 webservice 创建与配置(java)
Jan 27 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
PHP生成条形图的方法
Dec 10 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
php图像验证码生成代码
Jun 08 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 #PHP
php开启安全模式后禁用的函数集合
Jun 26 #PHP
php设计模式 Adapter(适配器模式)
Jun 26 #PHP
php设计模式 Builder(建造者模式)
Jun 26 #PHP
php设计模式 DAO(数据访问对象模式)
Jun 26 #PHP
php设计模式 Decorator(装饰模式)
Jun 26 #PHP
php设计模式 Delegation(委托模式)
Jun 26 #PHP
You might like
第十一节 重载 [11]
2006/10/09 PHP
php 过滤危险html代码
2009/06/29 PHP
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
简述vue中的config配置
2018/01/23 Javascript
vue组件横向树实现代码
2018/08/02 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
python 构造三维全零数组的方法
2018/11/12 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
Python列表如何更新值
2020/05/27 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
用python实现一个简单的验证码
2020/12/09 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
一些Unix笔试题和面试题
2013/01/22 面试题
《地震中的父与子》教学反思
2014/04/10 职场文书
成立公司计划书
2014/05/07 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
Python循环之while无限迭代
2022/04/30 Python