Sometimes you would face situations in which rmdir($dirname) would give "permission denied" errors though you may have changed $dirname permissions. In such situations just change the permissions of the directory which contains $dirname and rmdir($dirname) would work like a charm.
Say you use rmdir('dirr'); then change the permissions of the folder that contains 'dirr'.
rmdir
(PHP 4, PHP 5)
rmdir — Removes directory
설명
bool rmdir
( string $dirname
[, resource $context
] )
Attempts to remove the directory named by dirname . The directory must be empty, and the relevant permissions must permit this.
인수
- dirname
-
Path to the directory.
- context
-
Note: Context 지원은 PHP 5.0.0에서 추가되었습니다. contexts에 관한 자세한 설명은 Stream 함수 목록을 참고하십시오.
반환값
성공할 경우 TRUE를, 실패할 경우 FALSE를 반환합니다.
변경점
| 버전 | 설명 |
|---|---|
| 5.0.0 | As of PHP 5.0.0 rmdir() can also be used with some URL wrappers. Refer to 지원 프로토콜/래퍼 목록 for a listing of which wrappers support rmdir(). |
예제
Example #1 rmdir() example
<?php
if (!is_dir('examples')) {
mkdir('examples');
}
rmdir('examples');
?>
주의
Note: 안전 모드를 활성화했을 경우, PHP는 작업하려는 디렉토리가 실행중인 스크립트와 같은 UID(owner)를 가지고 있는지 확인합니다.
rmdir
omikrosys at gmail dot com
09-Oct-2009 01:52
09-Oct-2009 01:52
kevin at web-power dot co dot uk
02-Oct-2009 09:51
02-Oct-2009 09:51
I had situation where the rmdir was returning warning message as within last loop it was already removed. So here is quick fix by adding is_dir to the DelTree routine below
<?php
function delTree($dir) {
$files = glob( $dir . '*', GLOB_MARK );
foreach( $files as $file ){
if( substr( $file, -1 ) == '/' )
delTree( $file );
else
unlink( $file );
}
if (is_dir($dir)) rmdir( $dir );
}
?>
bcairns at gmail dot com
03-Aug-2009 01:59
03-Aug-2009 01:59
I wasn't having much luck with the recursive delete functions below, so I wrote my own:
<?php
// ensure $dir ends with a slash
function delTree($dir) {
$files = glob( $dir . '*', GLOB_MARK );
foreach( $files as $file ){
if( substr( $file, -1 ) == '/' )
delTree( $file );
else
unlink( $file );
}
rmdir( $dir );
}
?>
Simple. Works.
asn at asn24 dot dk
07-Jul-2009 01:08
07-Jul-2009 01:08
A patch to previous script to make sure rights for deletion is set:
<?php
//Delete folder function
function deleteDirectory($dir) {
if (!file_exists($dir)) return true;
if (!is_dir($dir) || is_link($dir)) return unlink($dir);
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') continue;
if (!deleteDirectory($dir . "/" . $item)) {
chmod($dir . "/" . $item, 0777);
if (!deleteDirectory($dir . "/" . $item)) return false;
};
}
return rmdir($dir);
}
?>
[EDITOR NOTE: "Credits to erkethan at free dot fr." - thiago]
senthryl at NOSPAM dot geemail dot com
26-Jun-2009 03:39
26-Jun-2009 03:39
Here's another version of the recursive directory removal. This version requires PHP 5, and returns TRUE on success or FALSE on failure.
<?php
function deleteDirectory($dir) {
if (!file_exists($dir)) return true;
if (!is_dir($dir)) return unlink($dir);
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') continue;
if (!deleteDirectory($dir.DIRECTORY_SEPARATOR.$item)) return false;
}
return rmdir($dir);
}
?>
j_terlouw at planet dot nl
17-Jun-2009 05:24
17-Jun-2009 05:24
This function deletes a folder and all it's subfolders and files.
<?php
function remove_dir($current_dir) {
if($dir = @opendir($current_dir)) {
while (($f = readdir($dir)) !== false) {
if($f > '0' and filetype($current_dir.$f) == "file") {
unlink($current_dir.$f);
} elseif($f > '0' and filetype($current_dir.$f) == "dir") {
remove_dir($current_dir.$f."\\");
}
}
closedir($dir);
rmdir($current_dir);
}
}
?>
Might need some improvement, but it works fine.
maurozadu at gmail dot com
17-Jun-2009 12:03
17-Jun-2009 12:03
if you opened a dir with opendir() you must closedir() before try to execute rmdir() or you will get a "permision denied" error on windows systems.
Wrong:
<?php
$handle = opendir($dirpath);
//do whatever you need
rmdir($dirpath);
?>
Right:
<?php
$handle = opendir($dirpath);
//do whatever you need
closedir($handle)
rmdir($dirpath);
?>
TrashF at taistelumarsu dot org
08-Aug-2008 07:21
08-Aug-2008 07:21
In case you're trying to rmdir() and you keep getting 'Permission denied' errors, make sure you don't have the directory still open after using opendir(). Especially when writing recursive functions for deleting directories, make sure you have closedir() BEFORE rmdir().
rn at clubfl dot com
19-Dec-2007 03:16
19-Dec-2007 03:16
I've noticed that when using this command on a windows platform you may encounter a permissions error which may seem unwarranted. This commonly occurs if you are or were using a program to edit something in the to be deleted folder and either the item is still in the folder or the program that was accessing the file in that folder is still running(causing it to hold onto the folder).
SO... if you get a permissions error and there shouldn't be an issue with folder permissions check if there are files in there then check if there is a program running that is or was using a file that was in that folder and kill it.
not at any dot com
15-Apr-2006 03:21
15-Apr-2006 03:21
Save some time, if you want to clean a directory or delete it and you're on windows.
Use This:
chdir ($file_system_path);
exec ("del *.* /s /q");
You can use other DEL syntax, or any other shell util.
You may have to allow the service to interact with the desktop, as that's my current setting and I'm not changing it to test this.
aidan at php dot net
05-Sep-2004 04:48
05-Sep-2004 04:48
If you want to delete a file, or an entire folder (including the contents), use the below function.
http://aidanlister.com/repos/v/function.rmdirr.php
