使用PHP删除或取消链接目录中的文件夹

时间:2017-05-19 23:06:17

标签: 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(上传):

中的权限被拒绝

我在我的localhost上尝试使用此代码,我的用户帐户是管理员。

4 个答案:

答案 0 :(得分:0)

使用rmdirDocumentation这将允许您删除PHP中的空目录。

答案 1 :(得分:0)

您可以创建一个以递归方式删除文件(取消链接)和目录(rmdir)的函数。

有一个库可以让您轻松使用文件系统。它是一个名为Filesystem的Symfony组件。您可以轻松地将其用作独立组件。它具有remove方法,可以满足您的需求:http://symfony.com/doc/current/components/filesystem.html#remove

答案 2 :(得分:0)

使用以下使用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');

答案 3 :(得分:0)

好的,所以在修改函数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);