Ben PHP kullanarak içeriği ile bir klasörü silmek gerekir. rmdir()
ve unlink()
boş klasörleri silmek, ama içeriklerine sahip klasörleri silmek mümkün değildir.
Bu fonksiyon (sürece yazılabilir olduğu gibi) herhangi bir klasörü silmek için izin verecek ve bu dosyalar ve alt bulunuyor.
function Delete($path)
{
if (is_dir($path) === true)
{
$files = array_diff(scandir($path), array('.', '..'));
foreach ($files as $file)
{
Delete(realpath($path) . '/' . $file);
}
return rmdir($path);
}
else if (is_file($path) === true)
{
return unlink($path);
}
return false;
}
Kullanarak veya yineleme olmadan RecursiveDirectoryIterator
:
function Delete($path)
{
if (is_dir($path) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($files as $file)
{
if (in_array($file->getBasename(), array('.', '..')) !== true)
{
if ($file->isDir() === true)
{
rmdir($file->getPathName());
}
else if (($file->isFile() === true) || ($file->isLink() === true))
{
unlink($file->getPathname());
}
}
}
return rmdir($path);
}
else if ((is_file($path) === true) || (is_link($path) === true))
{
return unlink($path);
}
return false;
}
(Herhangi klasörlerinin içerikleri dahil) klasör içeriğini etrafında döngü gerekir ve önce onları kaldırın.
Bir örnek var burada: http://lixlpixel.org/recursive%5Ffunction/php/recursive%5Fdirectory%5Fdelete/
Onunla dikkatli olun!
Bu, size rmdir ile kendi yazmak ve bağlantısını zorunda sağlayacak tek bir işlev PHP içine inşa vardır.
Bir örnek (bir yorumda alınan php.net docs):
<?
// 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 );
}
?>
Bu Delete a file, or a folder and its contents bir göz atın
Dizinleri özyinelemeli silinmesi için bazı yararlı kütüphaneler vardır here.
Burada sadece ihtiyacınız ne yapacak senaryo:
/**
* Recursively delete a directory
*
* @param string $dir Directory name
* @param boolean $deleteRootToo Delete specified top-level directory as well
*/
function unlinkRecursive($dir, $deleteRootToo)
{
if(!$dh = @opendir($dir))
{
return;
}
while (false !== ($obj = readdir($dh)))
{
if($obj == '.' || $obj == '..')
{
continue;
}
if (!@unlink($dir . '/' . $obj))
{
unlinkRecursive($dir.'/'.$obj, true);
}
}
closedir($dh);
if ($deleteRootToo)
{
@rmdir($dir);
}
return;
}
Ben php.net onu aldım ve çalışıyor.
Belki de daha iyi bir yaklaşım (Linux altında iseniz) rm
kullanmaktır. Böyle bir şey ($root
DAİMA ayarlanmış olmalıdır sizin TMP directory
hayati dosyaları silerek önlemek için!) Gitmek istiyorum:
function remove($dir) {
$root = $_SERVER['DOCUMENT_ROOT'].'/tmp/';
if (is_dir($root.$dir)) {
exec('rm -rf '.$root.$dir);
}
}