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 Header用于页面跳转要注意的几个问题总结
Oct 03 PHP
一些 PHP 管理系统程序中的后门
Aug 05 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
php数字游戏 计算24算法
Jun 10 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
Apr 25 PHP
php中PDO方式实现数据库的增删改查
May 17 PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
PHP自定义错误用法示例
Sep 28 PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
微信小程序轮播图swiper代码详解
2020/12/01 Javascript
python字符串,数值计算
2016/10/05 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python编写打字训练小程序
2019/09/26 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
学前教育毕业生自荐信
2013/10/29 职场文书
工作分析计划书
2014/04/30 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
亮剑观后感300字
2015/06/05 职场文书
2019消防宣传标语!
2019/07/10 职场文书