当前位置:Gxlcms > PHP教程 > php新建文件自动编号的思路与实现_PHP教程

php新建文件自动编号的思路与实现_PHP教程

时间:2021-07-01 10:21:17 帮助过:5人阅读

要求:在系统中 在新建文件是可以实现自动编号。比如新建文本文件 默认文件名是:新建 文本文档.txt,如果继续新建时文件名自动变了:新建 文本文档 (2).txt, 以后就是 3,4,5….请问这种算法用PHP怎么实现。
思路,原来想用循环来做,后来想想,用计数器递增吧,简单高效,这个TME可以是数据库,可以文件,可以是配置文件,看你怎么做了,循环只是在维护的时候使用的,如果每建一个新文件也得循环一次,那得累死,缓存无处不在
代码如下:
  1. <br><!--?php <BR-->$dir="/web/csp/images/test/"; <br>if(!file_exists($dir.'cache.txt')){ <br>file_put_contents($dir.'cache.txt',1); <br>file_put_contents($dir.'新建文件.txt',''); <br>}else{ <br>$num = file_get_contents($dir.'cache.txt'); <br>$num ++ ; <br>$name = '新建文件 ('.$num.').txt'; <br>file_put_contents($dir.'cache.txt',$num); <br>file_put_contents($dir.$name,''); <br>}?> <br> <br>银子童鞋重写后的 <br><span style="CURSOR: pointer" onclick="doCopy('code59378')"><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br><!--?php <BR-->function createFile($filename, $content = '') <br>{ <br>if(file_exists($filename . '.tmp')) <br>{ <br>$num = (int) file_get_contents($filename . '.tmp') + 1; <br>$fileinfo = pathinfo($filename); <br>file_put_contents($fileinfo['filename'] . '(' . $num . ').' .$fileinfo['extension'], $content); <br>file_put_contents($filename . '.tmp', $num); <br>} <br>else <br>{ <br>file_put_contents($filename, $content); <br>file_put_contents($filename . '.tmp', 1); <br>} <br>} <br>createFile('test.txt'); <br>?> <br> <br>第三种,循环的 <br><span style="CURSOR: pointer" onclick="doCopy('code37352')"><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br><!--?php <br--><br>$files = scandir('.'); //此代码在web根目录下写就 <br>$num = 0; <br>$str = '新建 文本文档'; <br>foreach ($files as $k=> $file) { <br>if (is_file($file) && preg_match('/(.*)\((\d+)\)\.txt/', $file, $matched)) { <br>$num = $matched[2]>$num ? $matched[2] : $num; <br>} <br>} <br>$filename = $num == 0 ? $str . '(1).txt' : $str . '(' . ($num+1) . ').txt'; <br>if (fopen($filename, 'w')) { <br>echo '成功创建文件:' . $filename; <br>} <br>?> <br> <br>以下是网友的回复:<br>1.关于第一段代码的. <br>在自动新建几个文件之后, <br>比如:现在的新建出来的文件有 <br>新建文件.txt <br>新建文件 (2).txt <br>新建文件 (3).txt <br>这三个文件,如果这个时候删除了 <br>新建文件 (2).txt <br>新建文件 (3).txt <br>这两个,然后再执行那个PHP,因为Cache.txt计数的问题,再执行的时候新建的文件是 <br>新建文件 (4).txt <br>并没有智能的根据序列创建. <br>而上面的操作,在Windows下的结果 新建出来的文件名应该是 <br>新建文件 (2).txt <br><br>2.关于第二段的. <br>首先,肯定也存在上面的问题,而更为严重的是,创建出来的文件,文件名与扩展名的 . 分隔符丢了.. <br>即: <br>test.txt <br>test(2)txt <br>test(3)txt <br>test(4)txt <br>究其原因是因为,在组合文件名的时候.没有把扩展名的点给加上去. <br><span style="CURSOR: pointer" onclick="doCopy('code76873')"><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>file_put_contents($fileinfo['filename'] . '(' . $num . ')' .$fileinfo['extension'], $content); <br> <br><br>来段更好玩的,更短的. <br>效率应该会比上面的使用缓存(tmp文件)或者正则(preg_match)的好很多. <br><span style="CURSOR: pointer" onclick="doCopy('code58310')"><u></u></span> 代码如下:<br><!--?php <BR-->$prefix = '新建 文本文档'; <br>$suffix = '.txt'; <br>$t = $prefix.$suffix;//新建 文本文档.txt <br>$i = 1; <br>while(file_exists($t)){//新建 文本文档(\d+).txt <br>$t = $prefix.'('.++$i.')'.$suffix; <br>} <br>fclose(fopen($t, 'w')); <br>?> <br></li><li><p></p></li><li><p align="left"><span id="url" itemprop="url">http://www.bkjia.com/PHPjc/323770.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/323770.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">要求:在系统中 在新建文件是可以实现自动编号。比如新建文本文件 默认文件名是:新建 文本文档.txt,如果继续新建时文件名自动变了:...</span></p></li><li> </li></ol></pre></li></ol></pre></li></ol></pre>

人气教程排行