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 相关文章推荐
一个可以删除字符串中HTML标记的PHP函数
Oct 09 PHP
PHP 5.3.0 安装分析心得
Aug 07 PHP
如何用phpmyadmin设置mysql数据库用户的权限
Jan 09 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
ThinkPHP的MVC开发机制实例解析
Aug 23 PHP
yii实现图片上传及缩略图生成的方法
Dec 04 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
php实现分页显示
Nov 03 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 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实现文件下载更能介绍
2012/11/23 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
python中enumerate函数用法实例分析
2015/05/20 Python
Python 登录网站详解及实例
2017/04/11 Python
Python 操作MySQL详解及实例
2017/04/30 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
德国帽子专家:Hutshopping
2019/11/03 全球购物
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
文秘专业个人求职信
2013/12/22 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
警校毕业生自我评价
2014/04/06 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
关于保护环境的建议书
2019/06/24 职场文书
详解Vue slot插槽
2021/11/20 Vue.js