Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP删除或取消目录中的文件夹链接_Php - Fatal编程技术网

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

使用PHP删除或取消目录中的文件夹链接,php,Php,我可以使用PHPunlink()删除服务器上载文件夹中的文件,但脚本只删除文件,如何包含和删除文件夹 $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

我可以使用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(上载):中的权限被拒绝


我正在本地主机上自己尝试此代码,并且我的用户帐户是管理员。

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

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


有一个库可以让您轻松地使用文件系统。它是一个名为
文件系统
的Symfony组件。您可以轻松地将其作为独立组件使用。它有
remove
方法,可以执行您需要的操作:

使用以下使用的函数

RecursiveDirectoryIterator提供了一个接口,用于在文件系统目录上进行递归迭代

就像

 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);

检查。你读过了吗:还有一个递归删除所有文件和目录的例子。您的权限被拒绝可能是因为试图删除
目录。
目录可能重复@Don’t Panic我正在使用最上面的答案代码,但却出现了此错误
“RecursiveDirectoryIterator::\uu构造(upload\*,upload\*):权限被拒绝”
即使使用了应该删除文件夹而不是文件的代码,当然,您正在执行此操作的用户帐户可能没有执行此操作所需的权限。当您否决投票时,请尝试在这样做时发表评论您正在帮助我改进我的答案,而不是重复我的错误。如果您的问题已解决,请接受您的答案,并对有用的答案进行表决,这就是它的工作原理。
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);