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 分页分组类
Dec 10 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
Jun 21 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
Apr 30 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
thinkphp项目如何自定义微信分享描述内容
Feb 20 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
针对PHP开发安全问题的相关总结
Mar 22 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
一段防盗连的PHP代码
2006/12/06 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
php和asp语法上的区别总结
2019/05/12 PHP
使用JavaScript和C#中获得referer
2014/11/14 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
angular实现商品筛选功能
2017/02/01 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
js实现图片无缝循环轮播
2019/10/28 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
python简单猜数游戏实例
2015/07/09 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python金融数据可视化汇总
2017/11/17 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
Python with标签使用方法解析
2020/01/17 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
考试作弊万能检讨书
2014/10/19 职场文书
认识实习感想
2015/08/10 职场文书
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript