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的5个入手程序
Nov 23 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
php下删除字符串中HTML标签的函数
Aug 27 PHP
php下通过伪造http头破解防盗链的代码
Jul 03 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
ajax在joomla中的原生态应用代码
Jul 19 PHP
YII实现分页的方法
Jul 09 PHP
PHP ignore_user_abort函数详细介绍和使用实例
Jul 15 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
php的instanceof和判断闭包Closure操作示例
Jan 26 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
改造一台复古桌面收音机
2021/03/02 无线电
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
php防盗链的常用方法小结
2010/07/02 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
php使用curl访问https示例分享
2014/01/17 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
javascript 面向对象编程基础 多态
2009/08/21 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
Python标准库内置函数complex介绍
2014/11/25 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
python追加元素到列表的方法
2015/07/28 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Python实现学生成绩管理系统
2020/04/05 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
RIP版本1跟版本2的区别
2013/12/30 面试题
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
捐书活动总结
2014/05/04 职场文书
党员公开承诺书内容
2014/05/20 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
委托书怎样写
2014/08/30 职场文书
管理人员岗位职责
2015/02/14 职场文书
文艺晚会开场白
2015/05/29 职场文书