程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP遞歸復制、移動目錄的自定義函數分享

PHP遞歸復制、移動目錄的自定義函數分享

編輯:PHP綜合

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

復制代碼 代碼如下:
<?php
//自定義函數遞歸的復制帶有多級子目錄的目錄
function copyDir($dirSrc,$dirTo){
    if(is_file($dirTo)){      //如果目標不是一個目錄則退出
        echo "目標不是目錄不能創建!!";
        return; //退出函數
    }
    if(!file_exists($dirTo)){       //如果目標不是一個目錄則退出
       mkdir($dirTo);              //創建目錄
    }
 
    if($dir_handle = @opendir($directory)){         //打開目錄,並判斷是否能成功打開
        while($filename = readdir($dir_handle)){          //循環遍歷目錄下的所有文件
            if($filename != "."&& $filename != ".."){          //一定要排除兩個特殊的目錄
               $subFile = $directory."/".$filename;          //將目錄下的子文件和當前目錄相連
               $sunToFile = $dirTo."/".$filename;          //將目標目錄的多級子目錄相連
               if(is_dir($subSrcFile))          //如果為目錄則條件成立
                   copyDir($subSrcFile,$subToFile);          //遞歸調用自己復制子目錄
               if(is_file($subSrcFile))          //如果是文件則條件成立
                   copy($subSrcFile,$subToFile);          //直接復制到目標位置
            }
        }
        losedir($dir_handle);          //關閉文件資源
     }
}
 
//測試函數,將目錄“phpMyAdmin”復制到“D:/admin”
copyDir("phpMyAdmin","D:/admin");
?>

從安全和跨平台等方面考慮,盡量不要去調用操作系統的SHELL命令“cp-a”完成目錄的復制。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved