PHP遞歸復(fù)制、移動(dòng)目錄的自定義函數(shù)分享
雖然復(fù)制一個(gè)目錄是文件操作的基本功能。但PHP中也沒(méi)有給出特定的函數(shù),同樣需要自定義一個(gè)遞歸函數(shù)實(shí)現(xiàn)。要復(fù)制一個(gè)包含多個(gè)子目錄的目錄,將涉及文件的復(fù)制、目錄創(chuàng)建等操作。復(fù)制一個(gè)文件可以通過(guò)PHP提供的copy()函數(shù)完成,創(chuàng)建目錄可以使用mkdir()函數(shù)。定義函數(shù)時(shí),首先對(duì)源目錄進(jìn)行遍歷,如果遇到的是普通文件,直接使用copy()函數(shù)進(jìn)行復(fù)制。如果遍歷時(shí)遇到一個(gè)目錄,則必須建立該目錄,然后再對(duì)該目錄下的文件進(jìn)行復(fù)制操作,如果還有子目錄,則使用遞歸重復(fù)操作,最終將整個(gè)目錄復(fù)制完成。自定義的遞歸函數(shù)復(fù)制目錄的程序代碼如下所示:
<?php
//自定義函數(shù)遞歸的復(fù)制帶有多級(jí)子目錄的目錄
function copyDir($dirSrc,$dirTo){
if(is_file($dirTo)){ //如果目標(biāo)不是一個(gè)目錄則退出
echo "目標(biāo)不是目錄不能創(chuàng)建!!";
return; //退出函數(shù)
}
if(!file_exists($dirTo)){ //如果目標(biāo)不是一個(gè)目錄則退出
mkdir($dirTo); //創(chuàng)建目錄
}
if($dir_handle = @opendir($directory)){ //打開(kāi)目錄,并判斷是否能成功打開(kāi)
while($filename = readdir($dir_handle)){ //循環(huán)遍歷目錄下的所有文件
if($filename != "."&& $filename != ".."){ //一定要排除兩個(gè)特殊的目錄
$subFile = $directory."/".$filename; //將目錄下的子文件和當(dāng)前目錄相連
$sunToFile = $dirTo."/".$filename; //將目標(biāo)目錄的多級(jí)子目錄相連
if(is_dir($subSrcFile)) //如果為目錄則條件成立
copyDir($subSrcFile,$subToFile); //遞歸調(diào)用自己復(fù)制子目錄
if(is_file($subSrcFile)) //如果是文件則條件成立
copy($subSrcFile,$subToFile); //直接復(fù)制到目標(biāo)位置
}
}
losedir($dir_handle); //關(guān)閉文件資源
}
}
//測(cè)試函數(shù),將目錄“phpMyAdmin”復(fù)制到“D:/admin”
copyDir("phpMyAdmin","D:/admin");
?>
從安全和跨平臺(tái)等方面考慮,盡量不要去調(diào)用操作系統(tǒng)的SHELL命令“cp-a”完成目錄的復(fù)制。
- ThinkPHP自定義函數(shù)解決模板標(biāo)簽加減運(yùn)算的方法
- PHP中生成UUID自定義函數(shù)分享
- PHP隨機(jī)生成唯一HASH值自定義函數(shù)
- PHP實(shí)現(xiàn)的下載遠(yuǎn)程圖片自定義函數(shù)分享
- PHP跨平臺(tái)獲取服務(wù)器IP地址自定義函數(shù)分享
- PHP統(tǒng)計(jì)目錄大小的自定義函數(shù)分享
- ThinkPHP模板之變量輸出、自定義函數(shù)與判斷語(yǔ)句用法
- PHP實(shí)現(xiàn)手機(jī)號(hào)碼中間四位用星號(hào)(*)隱藏的自定義函數(shù)分享
- PHP采用自定義函數(shù)實(shí)現(xiàn)遍歷目錄下所有文件的方法
- 把文本中的URL地址轉(zhuǎn)換為可點(diǎn)擊鏈接的JavaScript、PHP自定義函數(shù)
- PHP生成等比縮略圖類和自定義函數(shù)分享
- php自定義函數(shù)截取漢字長(zhǎng)度
- php生成隨機(jī)密碼自定義函數(shù)代碼(簡(jiǎn)單快速)
- PHP幾個(gè)實(shí)用自定義函數(shù)小結(jié)
相關(guān)文章
php簡(jiǎn)單實(shí)現(xiàn)多維數(shù)組排序的方法
這篇文章主要介紹了php簡(jiǎn)單實(shí)現(xiàn)多維數(shù)組排序的方法,涉及php數(shù)組的遍歷及array_multisort函數(shù)的相關(guān)使用技巧,需要的朋友可以參考下2016-09-09
解決php接收shell返回的結(jié)果中文亂碼問(wèn)題
shell輸出的有中文,則php得到的中文返回結(jié)果為亂碼,下面有個(gè)不錯(cuò)的解決方法,大家可以參考下2014-01-01
php連接mysql之mysql_connect()與mysqli_connect()的區(qū)別
本擴(kuò)展自 PHP 5.5.0 起已廢棄,并在將來(lái)會(huì)被移除。應(yīng)使用 MySQLi 或 PDO_MySQL 擴(kuò)展來(lái)替換之,這里就為大家分享一下mysql_connect()與mysqli_connect()的區(qū)別,需要的朋友可以參考下2020-07-07
PHP隊(duì)列原理及基于隊(duì)列的寫(xiě)文件案例
這篇文章主要介紹了PHP隊(duì)列原理及基于隊(duì)列的寫(xiě)文件案例,較為詳細(xì)的分析了隊(duì)列的原理、定義方法并結(jié)合實(shí)例形式給出了php基于隊(duì)列的寫(xiě)文件操作技巧,需要的朋友可以參考下2017-11-11
10個(gè)對(duì)初學(xué)者非常有用的PHP技巧
這篇文章主要為大家詳細(xì)介紹了10個(gè)對(duì)初學(xué)者非常有用的PHP技巧,這些PHP技巧適用于初學(xué)者,而不是那些已經(jīng)在使用MVC框架的人,感興趣的小伙伴們可以參考一下2016-04-04

