刪除檔案和目錄

刪除檔案

unlink 函式刪除一個檔案,並返回該操作是否成功。

$filename = '/path/to/file.txt';

if (file_exists($filename)) {
    $success = unlink($filename);
    
    if (!$success) {
         throw new Exception("Cannot delete $filename");
    }
}

使用遞迴刪除刪除目錄

另一方面,應使用 rmdir 刪除目錄。但是,此功能僅刪除空目錄。要刪除包含檔案的目錄,請先刪除目錄中的檔案。如果目錄包含子目錄,則可能需要遞迴

以下示例掃描目錄中的檔案,以遞迴方式刪除成員檔案/目錄,並返回已刪除的檔案(而不是目錄)的數量。

function recurse_delete_dir(string $dir) : int {
    $count = 0;

    // ensure that $dir ends with a slash so that we can concatenate it with the filenames directly
    $dir = rtrim($dir, "/\\") . "/";

    // use dir() to list files
    $list = dir($dir);

    // store the next file name to $file. if $file is false, that's all -- end the loop.
    while(($file = $list->read()) !== false) {
        if($file === "." || $file === "..") continue;
        if(is_file($dir . $file)) {
            unlink($dir . $file);
            $count++;
        } elseif(is_dir($dir . $file)) {
            $count += recurse_delete_dir($dir . $file);
        }
    }

    // finally, safe to delete directory!
    rmdir($dir);

    return $count;
}