我正在尝试删除其中包含文件的文件夹,但以下代码会删除文件,但不删除文件夹。
$nameFolder = $_GET['delete'];
$dir = '../projecten/projecten/'.$nameFolder.'';
$filesIN = glob($dir."/"."*");
$status = 'false';
foreach($filesIN as $files) //here i take all the files
unlink($files);
$status = 'true';
if($status=='true'){
rmdir($dir);
$status = 'false';
}
答案 0 :(得分:3)
[已编辑] 只能删除空目录。
<强>尝试:强>
<?php
//recursively remove a directory
function rrmdir($dir) {
foreach(glob($dir . '/' . '*') as $file) {
if(is_dir($file)){
rrmdir($file);
}else{
unlink($file);
}
}
rmdir($dir);
}
//Example
$nameFolder = $_GET['delete'];
$dir = '../projecten/projecten/'.$nameFolder.'';
rrmdir($dir);
?>
来源:http://www.php.net/manual/pt_BR/function.rmdir.php#108113
答案 1 :(得分:1)
我会检查文件权限。在linux上:
ls -al /path/to/projecten/projecten/
简单来说,Web服务器用户必须具有对目录的写访问权才能删除该文件,例如用户www-data。在下面的示例中,用户lt可以删除测试文件:
drwxrwxr-x 2 lt lt 4096 Apr 29 08:54 test
我也不明白这段代码:
$status = 'true';
if($status=='true'){
rmdir($dir);
$status = 'false';
}
为什么不只是:
rmdir($dir);
由于$ status始终为'true'。
您也可以尝试使用系统调用,例如:
system `rm -rf /full/path/to/projecten/projecten/$nameFolder`;
尽管如此,请注意该系统命令 - 如果删除了错误的目录,则无法返回!
如果您知道目录为空,则使用更安全的系统命令:
system `rmdir /full/path/to/projecten/projecten/$nameFolder`;
但正如上面的评论中指出的那样,要非常小心地删除基于$ _GET变量的目录。想象一下,如果GET变量是'../../projecten',尤其是'rm -rf'系统命令
答案 2 :(得分:0)
不是答案,但请更改:
$nameFolder = $_GET['delete'];
要:
$nameFolder = basename($_GET['delete']);
您可能还想添加:
if (is_dir('../projecten/projecten/'.$nameFolder) {
// ... do stuff here
} else {
// not a valid path
}