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 相关文章推荐
玩转虚拟域名◎+ .
Oct 09 PHP
构建简单的Webmail系统
Oct 09 PHP
Smarty模板快速入门
Jan 04 PHP
php empty函数 使用说明
Aug 10 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
Zend Guard使用指南及问题处理
Jan 07 PHP
PHP自定义多进制的方法
Nov 03 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
Nov 05 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
Dedecms常用函数解析
2008/02/01 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
用原生js统计文本行数的简单示例
2016/08/19 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python基于PycURL实现POST的方法
2015/07/25 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
家长对老师的感言
2014/03/11 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
活动总结的格式
2014/05/07 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
职工培训工作总结
2015/08/10 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电
Python开发五子棋小游戏
2022/05/02 Python