php中移動復制文件我們使用copy,下面我們來看一個簡單的實例,他實現了目錄與目錄文件移動,希望此文章對大家幫助。
方法一,copy+unlink方式
我的思路是:移動=新建+刪除。在移動之前在目標的目錄新建一個文件夾,然後在把文件和目錄都復制過去,最後在執行刪除.
代碼如下 復制代碼/**
* @parammoveDir 剪切文件和目錄
* @param string $to 目標文件路徑
* @param string $from 源文件路徑
*/
function moveDir($from,$to){
if(!is_dir($from)){//判斷$from源文件目錄是不是存在
return false;
}
$from = rtrim(str_replace(‘//’,'/’,$from), ‘/’);//為了在linux上兼容,我們把/符號全部轉換成/因為windows下面2個符號都可以的.
$files = scandir($from);//列出源文件目錄的文件和文件夾,並且以數組的形式存入 $files。
/*
$files的輸出結果:
Array ( [0] => . [1] => .. [2] => a [3] => b [4] => c [5] => dir [6] => dir.php [7] => dir2 [8] => dir2.php [9] => function_file.php [10] => homework.php )
可以看到scandir這個函數會輸出2個多余的值: [0] => . [1] => ..在這對我們木有用.寫一個if干掉他們。
*/
foreach($files as $file){//對 $files數組進行遍歷,方便對數組裡面的文件夾和文件進行復制和刪除.
if(in_array($file, array(‘.’,’..’))){// array(‘.’,’..’)新建了一個只有.和..的數組,並且查找$file裡面知否有.和..這2個值
continue;
}
$subFrom = $from.’/’.$file;//把遍歷後的文件夾或者文件名變成一個新的路徑
$subTo = $to.’/’.$file;
if(is_dir($subFrom)){
@mkdir($subTo);//判斷$subFrom是不是一個目錄,如果是目錄就在目標的目錄下面,新建一個目錄
moveDir($subFrom, $subTo);//遞歸執行新建目錄。
}else{//不是目錄的話,就直接復制文件.復制完就刪除文件.
copy($subFrom, $subTo);
unlink($subFrom);//刪除所有文件
}
@rmdir($subFrom);//刪除所有的目錄
}
return true;
}
moveDir(‘C:/Users/Administrator/Desktop/0704′,’e:’);//在這傳遞你要移動的文件或者目錄的地址
方法二,rename
1.對於文件,rename可以在不同盤符之間移動.
2.對於空文件夾,rename也可以在不同盤符之間移動.但是目標文件夾的父目錄必須存在.
3.對於非空文件夾,只能在同一盤符下移動.不過,1和3,應該差不多能夠對付所有的應用情況了.
代碼如下 復制代碼
<?php
rename("D:/testdir/test","F:/totestdir/mydir");
?>
對於一個40M的文件,copy+unlink方式需要7.6249899864197秒,而rename方式,只需要0.024738788604736,快300倍.
例
代碼如下 復制代碼<?php
//定義一個變量,保存文件名
$file = "html/cache.txt";
$rename = "html/renameCache.txt";
//使用rename()函數重命名一個文件
if(rename($file,$rename)==TRUE){
echo "重命名文件成功!";
}else{
echo "重命名文件失敗!";
}
//使用rename()函數移動文件,並改名
rename("html/renameCache.txt","html/a/2.txt");
//使用rename()函數重命名目錄
rename("html","cache");
//使用rename()函數移動目錄到目標目錄
rename("b","cache/b");
?>