在這裡我們利用一個戰地自己寫的一個例子來具體分析一下利用PHP批量修改文件名稱的思路和注意事項。
從這個例子裡你將會看到,PHP如何判斷一個路徑是不是目錄,如何用PHP取得路徑中的文件名稱和文件的擴展名,隨機函數rand的基本應用,以及這個程序的核心內容遞歸函數的基本應用。
程序功能:利用PHP目錄和文件函數遍歷用戶給出目錄的所有的文件和文件夾,修改文件名稱;
首先判斷用戶給出的目錄是不是一個合法目錄;
我們這裡只是修改狹義的文件名稱(不包括目錄),所以在程序中一定要判斷是不是目錄,如果是目錄我們就打開這個目錄——從而實現遍歷目錄下的所有文件。如果不是我們就用一個隨機的名稱修改原來的文件名(用隨機數做名稱其實不科學,但是這不是我們的重點)。
具體的程序如下:
代碼如下復制代碼
<?php
//利用PHP目錄和文件函數遍歷用戶給出目錄的所有的文件和文件夾,修改文件名稱
functionfRename($dirname){
if(!is_dir($dirname)){
echo"{$dirname}不是一個有效的目錄!";
exit();
}
$handle= opendir($dirname);
while(($fn= readdir($handle))!==false){
if($fn!='.'&&$fn!='..'){
$curDir=$dirname.'/'.$fn;
if(is_dir($curDir)){
fRename($curDir);
}
else{
$path=pathinfo($curDir);
$newname=$path['dirname'].'/'.rand(0,100).'.'.$path['extension'];
rename($curDir,$newname);
echo$curDir.'---'.$newname."
";
}
}
}
}
//給出一個目錄名稱調用函數
fRename('pl');
?>
程序分析:
第4行我們用is_dir函數來判斷用戶給出的目錄是不是一個有效的目錄名稱;因為我們是學習所以寫的簡單一點如果你要放在服務器上供大家使用的話,你一定要謹慎的驗證這個輸入數據——例如,這個目錄是否允許用戶修改等等……
注意函數第9行的判斷,必須用全等判斷(PHP全等符號===三個等號,不全等!==一個歎號兩個等號),否則如果有一個文件名稱為0(零),會導致程序意外終止;
第12行,如果讀取的文件是一個目錄,就在此調用函數本身,實現函數的遞歸;
注意第16行pathinfo函數的用法,這個函數返回一個擁有三個元素的數組三個元素分別是:
Dirname路徑的目錄名稱,basename路徑包含的文件名稱 和 extension文件的擴展名,具體這個函數的用法請參看手冊相關部分。