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 批量生成html,txt文件的实现代码
Jun 26 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
May 23 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
php格式化电话号码的方法
Apr 24 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
Apr 14 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
php依赖注入知识点详解
Sep 23 PHP
php中get_object_vars()在数组的实例用法
Feb 22 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
2006/11/25 PHP
php单件模式结合命令链模式使用说明
2008/09/07 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
Using the TextRange Object
2006/10/14 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
vuex实现及简略解析(小结)
2019/03/01 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
python3 shelve模块的详解
2017/07/08 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
英国网上购买门:Direct Doors
2018/06/07 全球购物
承诺书格式
2014/06/03 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
外贸英文求职信范文
2015/03/19 职场文书
毕业典礼主持词
2015/06/29 职场文书
2019邀请函格式及范文
2019/05/20 职场文书
Go 内联优化让程序员爱不释手
2022/06/21 Golang