我能够使用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上尝试使用此代码,我的用户帐户是管理员。
答案 0 :(得分:0)
使用rmdir
。 Documentation这将允许您删除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);