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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
php缓冲 output_buffering的使用详解
Jun 13 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
php中如何防止表单的重复提交
Aug 02 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
php类常量用法实例分析
Jul 09 PHP
浅析php如何实现App常用的秒发功能
Aug 03 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 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者的疑难问答(1)
2006/10/09 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
在Django中同时使用多个配置文件的方法
2015/07/22 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
Django  ORM 练习题及答案
2019/07/19 Python
Python中os模块功能与用法详解
2020/02/26 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
《观舞记》教学反思
2014/04/16 职场文书
安全保证书范文
2014/04/29 职场文书
信息管理专业自荐书
2014/06/05 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
公司行政管理制度范本
2015/08/05 职场文书
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫
2022微信温控新功能上线
2022/05/09 数码科技