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 获取完整url地址
Dec 20 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
Nov 01 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
php session的锁和并发
Jan 22 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 PHP
php中访问修饰符的知识点总结
Jan 27 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 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的cookie与session原理及用法详解
2019/09/27 PHP
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
综合办公室个人的自我评价
2013/12/22 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
行政专员岗位职责
2014/01/02 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
大专毕业生求职信
2014/07/05 职场文书
成本会计实训报告
2014/11/05 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
医院营销工作计划
2015/01/16 职场文书
介绍信样本
2015/01/31 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
老乡会致辞
2015/07/28 职场文书
校园之声广播稿
2015/08/18 职场文书
浅析Python中的套接字编程
2021/06/22 Python
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
MySQL数据库 任意ip连接方法
2022/05/20 MySQL
小程序实现侧滑删除功能
2022/06/25 Javascript