首頁 >後端開發 >php教程 >如何在 PHP 中遞歸複製目錄內容?

如何在 PHP 中遞歸複製目錄內容?

Linda Hamilton
Linda Hamilton原創
2024-10-31 12:35:02857瀏覽

How to Recursively Copy Directory Contents in PHP?

使用PHP 複製目錄內容

在PHP 中將目錄的全部內容複製到另一個位置可能是一項簡單的任務,但會遇到諸如流未找到錯誤之類的問題可能會令人沮喪。為了避免這種情況,需要更明確的方法。

為了克服在 copy() 函數中使用通配符的限制,可以使用名為 recurseCopy() 的遞歸函數。此函數允許複製多層目錄結構及其內容。

recurseCopy() 函數採用三個參數:

  • $sourceDirectory:要復制的源目錄
  • $destinationDirectory:保存複製內容的目標目錄
  • $childFolder(可選):$destinationDirectory 下用於組織複製檔案的資料夾名稱(在遞歸期間使用)

此函數迭代來源目錄的檔案和子目錄。如果遇到文件,則直接複製到目標目錄。如果找到子目錄,函數會遞歸呼叫自身,將其內容複製到目標目錄下對應的子目錄中。

以下是使用 recurseCopy() 函數的範例 PHP 程式碼:

<code class="php">function recurseCopy(string $sourceDirectory, string $destinationDirectory, string $childFolder = ''): void {
    $directory = opendir($sourceDirectory);

    if (is_dir($destinationDirectory) === false) {
        mkdir($destinationDirectory);
    }

    if ($childFolder !== '') {
        if (is_dir("$destinationDirectory/$childFolder") === false) {
            mkdir("$destinationDirectory/$childFolder");
        }

        while (($file = readdir($directory)) !== false) {
            if ($file === '.' || $file === '..') {
                continue;
            }

            if (is_dir("$sourceDirectory/$file") === true) {
                recurseCopy("$sourceDirectory/$file", "$destinationDirectory/$childFolder/$file");
            } else {
                copy("$sourceDirectory/$file", "$destinationDirectory/$childFolder/$file");
            }
        }

        closedir($directory);

        return;
    }

    while (($file = readdir($directory)) !== false) {
        if ($file === '.' || $file === '..') {
            continue;
        }

        if (is_dir("$sourceDirectory/$file") === true) {
            recurseCopy("$sourceDirectory/$file", "$destinationDirectory/$file");
        }
        else {
            copy("$sourceDirectory/$file", "$destinationDirectory/$file");
        }
    }

    closedir($directory);
}

$sourceDirectory = 'my_source_dir';
$destinationDirectory = 'my_destination_dir';

recurseCopy($sourceDirectory, $destinationDirectory);</code>

此程式碼將遞歸地將 my_source_dir 目錄的內容複製到 my_destination_dir 目錄,保留目錄結構和檔案內容。

以上是如何在 PHP 中遞歸複製目錄內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn