首頁  >  文章  >  後端開發  >  php新建檔案自動編號的思路與實現

php新建檔案自動編號的思路與實現

高洛峰
高洛峰原創
2016-11-30 09:30:381887瀏覽

要求:在系統中 在新建檔案是可以實現自動編號。例如新建文字檔案預設檔名是:新建文字文件.txt,如果繼續新建時檔案名稱自動變了:新建文字文件(2).txt, 以後就是3,4,5….請問這種演算法用PHP怎麼實現。
思路,原來想用循環來做,後來想想,用計數器遞增吧,簡單高效,這個TME可以是數據庫,可以文件,可以是配置文件,看你怎麼做了,循環只是在維護的時候使用的,如果每建一個新檔案也得循環一次,那得累死,快取無所不在 
複製程式碼 程式碼如下: 
$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,''); 
}?> 

銀子童鞋重寫後的 
複製程式碼 程式碼如下: 
function $create content = '') 

if(file_exists($filename . '.tmp')) 

$num = (int) file_get_contents($filename . '.tmp') + 1; 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); 
}

第三種,循環的 
複製程式碼 程式碼如下: 

$files = scandir('.'); //此程式碼在web根目錄下寫就 
$num = 0; = '新文字文件'; 
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.關於第一段程式碼的. 
在自動新建幾個檔案之後, 
例如:現在的新建出來的檔案有 
新建檔案. 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)的好很多. 
複製程式碼 程式碼如下:
$prefix = '新文字文件'; 
$prefix = '新文字文件'; 
$ suffix = '.txt'; 
$t = $prefix.$suffix;//新文字文件.txt 
$i = 1; 
while(file_exists($t)){//新文字文件(d+).txt
$t = $prefix.'('.++$i.')'.$suffix; 

fclose(fopen($t, 'w')); 
?> 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn