簡體   English   中英

使用PHP刪除或取消鏈接目錄中的文件夾

[英]Delete or Unlink folders inside a directory using PHP

我可以使用PHP unlink()刪除服務器上的上載文件夾中的文件,請參見以下代碼,但是腳本僅刪除文件,如何包括和刪除文件夾?

$files = glob('upload/*'); // get all file names
foreach($files as $file){ // iterate files
  if(is_file($file))
    unlink($file); // delete file
}

我找到了此代碼,但它給了我一個拒絕權限的錯誤。

array_map('unlink', glob("upload/*"));

並在下面使用此代碼

function deleteFiles($directory) {
    $recursive = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS);
    $files = new RecursiveIteratorIterator($recursive, RecursiveIteratorIterator::CHILD_FIRST);
    foreach ($files as $file) {
        if ($file->isDir()) {
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }
    rmdir($directory);
}

deleteFiles('upload');

但是顯示權限被拒絕錯誤

警告:rmdir(upload):權限被拒絕

我正在自己的本地主機上嘗試此代碼,我的用戶帳戶是管理員。

使用rmdir 文檔這將允許您刪除PHP中的空目錄。

您可以創建一個函數來遞歸刪除文件(取消鏈接)和目錄(rmdir)。

有一個庫可讓您輕松使用文件系統。 這是一個名為Filesystem的Symfony組件。 您可以輕松地將其用作獨立組件。 它具有可以執行您需要的操作的remove方法: http : //symfony.com/doc/current/components/filesystem.html#remove

使用以下使用RecursiveDirectoryIterator的函數

RecursiveDirectoryIterator提供了一個用於在文件系統目錄上進行遞歸迭代的接口。

function deleteFiles($directory) {
    $recursive = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS);
    $files = new RecursiveIteratorIterator($recursive, RecursiveIteratorIterator::CHILD_FIRST);
    foreach ($files as $file) {
        if ($file->isDir()) {
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }
    rmdir($directory);
}

像這樣稱呼它

 deleteFiles('uploads');

好的,所以在修改函數deleteFiles()我需要使用以下代碼將目錄設置為0777

chmod($directory,0777);

然后刪除后,我需要使用mkdir重新制作目錄,下面是修改后的代碼。

function deleteFiles($directory) {
    chmod($directory,0777);
    $recursive = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS);
    $files = new RecursiveIteratorIterator($recursive, RecursiveIteratorIterator::CHILD_FIRST);
    foreach ($files as $file) {
        if ($file->isDir()) {
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }
    rmdir($directory);
}

deleteFiles('upload');

mkdir("upload", 0700);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM