要求:在系統(tǒng)中 在新建文件是可以實(shí)現(xiàn)自動(dòng)編號(hào)。比如新建文本文件 默認(rèn)文件名是:新建 文本文檔.txt,如果繼續(xù)新建時(shí)文件名自動(dòng)變了:新建 文本文檔 (2).txt, 以后就是 3,4,5….請(qǐng)問這種算法用PHP怎么實(shí)現(xiàn)。 
思路,原來想用循環(huán)來做,后來想想,用計(jì)數(shù)器遞增吧,簡(jiǎn)單高效,這個(gè)TME可以是數(shù)據(jù)庫(kù),可以文件,可以是配置文件,看你怎么做了,循環(huán)只是在維護(hù)的時(shí)候使用的,如果每建一個(gè)新文件也得循環(huán)一次,那得累死,緩存無處不在 
復(fù)制代碼 代碼如下: 
<?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,''); 
}?> 

銀子童鞋重寫后的 
復(fù)制代碼 代碼如下: 
<?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'); 
?> 

第三種,循環(huán)的 
復(fù)制代碼 代碼如下: 
<?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 '成功創(chuàng)建文件:' . $filename; 

?> 

以下是網(wǎng)友的回復(fù):
1.關(guān)于第一段代碼的. 
在自動(dòng)新建幾個(gè)文件之后, 
比如:現(xiàn)在的新建出來的文件有 
新建文件.txt 
新建文件 (2).txt 
新建文件 (3).txt 
這三個(gè)文件,如果這個(gè)時(shí)候刪除了 
新建文件 (2).txt 
新建文件 (3).txt 
這兩個(gè),然后再執(zhí)行那個(gè)PHP,因?yàn)镃ache.txt計(jì)數(shù)的問題,再執(zhí)行的時(shí)候新建的文件是 
新建文件 (4).txt 
并沒有智能的根據(jù)序列創(chuàng)建. 
而上面的操作,在Windows下的結(jié)果 新建出來的文件名應(yīng)該是 
新建文件 (2).txt 

2.關(guān)于第二段的. 
首先,肯定也存在上面的問題,而更為嚴(yán)重的是,創(chuàng)建出來的文件,文件名與擴(kuò)展名的 . 分隔符丟了.. 
即: 
test.txt 
test(2)txt 
test(3)txt 
test(4)txt 
究其原因是因?yàn)?在組合文件名的時(shí)候.沒有把擴(kuò)展名的點(diǎn)給加上去. 
復(fù)制代碼 代碼如下: 
file_put_contents($fileinfo['filename'] . '(' . $num . ')' .$fileinfo['extension'], $content); 


來段更好玩的,更短的. 
效率應(yīng)該會(huì)比上面的使用緩存(tmp文件)或者正則(preg_match)的好很多. 
復(fù)制代碼 代碼如下:
<?php 
$prefix = '新建 文本文檔'; 
$suffix = '.txt'; 
$t = $prefix.$suffix;//新建 文本文檔.txt 
$i = 1; 
while(file_exists($t)){//新建 文本文檔(\d+).txt 
$t = $prefix.'('.++$i.')'.$suffix; 

fclose(fopen($t, 'w')); 
?> 
轉(zhuǎn)載請(qǐng)注明來源:php新建文件自動(dòng)編號(hào)的思路與實(shí)現(xiàn)

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無需額外費(fèi)用,即可穩(wěn)步提升排名至首頁(yè)。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。