溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

利用PHP怎么對遞歸進行復(fù)制

發(fā)布時間:2020-12-28 15:07:36 來源:億速云 閱讀:147 作者:Leah 欄目:開發(fā)技術(shù)

利用PHP怎么對遞歸進行復(fù)制?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

雖然復(fù)制一個目錄是文件操作的基本功能。但PHP中也沒有給出特定的函數(shù),同樣需要自定義一個遞歸函數(shù)實現(xiàn)。要復(fù)制一個包含多個子目錄的目錄,將涉及文件的復(fù)制、目錄創(chuàng)建等操作。復(fù)制一個文件可以通過PHP提供的copy()函數(shù)完成,創(chuàng)建目錄可以使用mkdir()函數(shù)。定義函數(shù)時,首先對源目錄進行遍歷,如果遇到的是普通文件,直接使用copy()函數(shù)進行復(fù)制。如果遍歷時遇到一個目錄,則必須建立該目錄,然后再對該目錄下的文件進行復(fù)制操作,如果還有子目錄,則使用遞歸重復(fù)操作,最終將整個目錄復(fù)制完成。自定義的遞歸函數(shù)復(fù)制目錄的程序代碼如下所示:

復(fù)制代碼 代碼如下:


<?php
//自定義函數(shù)遞歸的復(fù)制帶有多級子目錄的目錄
function copyDir($dirSrc,$dirTo){
    if(is_file($dirTo)){      //如果目標(biāo)不是一個目錄則退出
        echo "目標(biāo)不是目錄不能創(chuàng)建?。?quot;;
        return; //退出函數(shù)
    }
    if(!file_exists($dirTo)){       //如果目標(biāo)不是一個目錄則退出
       mkdir($dirTo);              //創(chuàng)建目錄
    }
 
    if($dir_handle = @opendir($directory)){         //打開目錄,并判斷是否能成功打開
        while($filename = readdir($dir_handle)){          //循環(huán)遍歷目錄下的所有文件
            if($filename != "."&& $filename != ".."){          //一定要排除兩個特殊的目錄
               $subFile = $directory."/".$filename;          //將目錄下的子文件和當(dāng)前目錄相連
               $sunToFile = $dirTo."/".$filename;          //將目標(biāo)目錄的多級子目錄相連
               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)閉文件資源
     }
}
 
//測試函數(shù),將目錄“phpMyAdmin”復(fù)制到“D:/admin”
copyDir("phpMyAdmin","D:/admin");
?>

從安全和跨平臺等方面考慮,盡量不要去調(diào)用操作系統(tǒng)的SHELL命令“cp-a”完成目錄的復(fù)制。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI