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 相关文章推荐
用PHP连接Oracle数据库
Oct 09 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
Jul 02 PHP
php语言的7种基本的排序方法
Dec 28 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
php redis实现文章发布系统(用户投票系统)
Mar 04 PHP
浅谈PHP中new self()和new static()的区别
Aug 11 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 PHP
Laravel框架实现调用百度翻译API功能示例
May 30 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 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
追求程序速度,而不是编程的速度
2008/04/23 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
Python面向对象程序设计示例小结
2019/01/30 Python
python实现超市商品销售管理系统
2019/11/22 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
C#怎么让一个窗口居中显示?
2015/10/20 面试题
应届生如何写自荐信
2014/01/05 职场文书
学生实习介绍信
2014/01/15 职场文书
初一地理教学反思
2014/01/16 职场文书
事业单位辞职信范文
2014/01/19 职场文书
高中运动会入场词
2014/02/14 职场文书
食品安全宣传标语
2014/06/07 职场文书
咖啡店创业计划书
2014/08/15 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
违章停车检讨书
2014/10/21 职场文书
党支部对转正的意见
2015/06/02 职场文书
大学入学感言
2015/08/01 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
nginx中proxy_pass各种用法详解
2021/11/07 Servers
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL
Redis全局ID生成器的实现
2022/06/05 Redis