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的加密方式及原理
Jun 14 PHP
header跳转和include包含问题详解
Sep 08 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
PHP将XML转数组过程详解
Nov 13 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
PHP判断指定时间段的2个方法
Mar 14 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
Jul 30 PHP
隐性调用php程序的方法
Jun 13 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
php中的异常和错误浅析
May 03 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 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
PHP number_format() 函数定义和用法
2012/06/01 PHP
php缓存技术详细总结
2013/08/07 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
Ext grid 添加右击菜单
2009/11/26 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
python文件写入write()的操作
2019/05/14 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
工程班组长岗位职责
2013/12/30 职场文书
学校万圣节活动方案
2014/02/13 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
工程质量月活动方案
2014/02/19 职场文书
班级安全教育实施方案
2014/02/23 职场文书
消防标语大全
2014/06/07 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL