關於文件的遞歸刪除目錄:注意理清楚各個路徑的使用即可
函數
<?php
//刪除目錄,須知:文件dir只能刪除空的,刪除文件夾用:rmdir(),刪除文件unlink();
//利用句柄當指針使用:readdir();
function del($path)
{
//去掉錯誤的路徑,自己格式化一次
$path = rtrim($path,'/');
//打開句柄
$resuoce = opendir($path);
while(false !== $fileName=(readdir($resuoce))){
if($fileName=='.'||$fileName=='..')continue;
//echo $path.'/'.$fileName.'<br />';
$fileNew = $path.'/'.$fileName;
//下面的參數必須是一個完整的路徑,而不是文件名
if(is_dir($fileNew)){
del($fileNew);
}else{
unlink($fileNew);
}
}
//刪除空目錄的順序需要在關閉資源之後,因爲:不能刪除一個爲關閉的資源,相當於刪除一個已經打開的文件一個道理;
closedir($resuoce);//參數是被打開的資源
rmdir($path);//刪除函數的參數必須是原打開的路徑因爲是遞歸遍歷,而且需要刪除自己打開的資源
}
// 調用
$path = './include';
del($path);
關於文件複製的遞歸函數:注意理清楚各個路徑的使用即可
函數
<?php
/**
* 函數功能複製一個目錄到指定的地方
* @param URL 需要複製的路徑
* @param URL 指定存放的路徑
*/
function copy_file($path,$to_path)
{
//格式化代碼,按照要求防止輸入參數和符合
$path= rtrim($path, '/');
$to_path= rtrim($to_path, '/');
if($path== '.' || $path== '..' || $to_path== '.' || $to_path== '..') return false;
//防止源目錄不存在和目標目錄存在
if(!file_exists($path) || !is_dir($path)) return false;
// if(!file_exists($src)){echo 1;}
if(!file_exists($to_path) || !is_dir($to_path)) mkdir($to_path);
//打開dir 打開句柄
$resouce = opendir($path);
//循環遍歷dir
//while(false !== $dirNewName=(readdir($resouce))){
while(false !== $dirNewName=(readdir($resouce))){
//防止文件向上遞歸讀取
if($dirNewName=='.'||$dirNewName=='..')continue;
//遞歸需要的路徑
$new_path = $path.'/'.$dirNewName;
//複製目標需要的路徑
$copy_fileN = $to_path.$new_path;
//echo $copy_fileN.'<hr />';
//遞歸文件夾
if(is_dir($new_path)){
// echo $new_path.'<hr />';
//複製文件夾,在遞歸之前執行是個邏輯順序問題,必須要先有文件夾,下面的文件纔有地方可放
mkdir($copy_fileN,0777,true);//這裏使用的路徑不能是自己的,要目標的;
//echo $to_path.'<hr />';
copy_file($new_path,$to_path);//第二個參數只是起到一個開頭引導作用,和函數體內的拼接目錄作用,所以寫原來 即可;
}else{
copy($new_path,$copy_fileN);//參數一:是源目標路徑,參數二:剛剛創建在指定位置的新目錄路徑
}
}
closedir($resouce);
}