删除php中的文件夹

时间:2010-09-02 21:25:22

标签: php

我正在尝试删除文件夹using this script

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

Delete('tmp');

它适用于我的Xampp服务器,但不适用于我的网络服务器。我已将文件夹及其包含的文件的权限更改为0777.因此它应该是可写的(或者在这种情况下是可擦除的)但没有任何反应。我甚至尝试将文件夹的绝对路径作为函数的参数,但仍然没有。任何想法?

6 个答案:

答案 0 :(得分:1)

使用此:

function delTree($dir)
{
 $files = glob( $dir . '*', GLOB_MARK );
 foreach( $files as $file 
 {
  if( is_dir( $file ) )
   delTree( $file );
  else
   @unlink( $file );
 }

 if( is_dir($dir) ) rmdir( $dir );
};

答案 1 :(得分:0)

它是否返回false?或者它返回true但实际上并没有删除?

通常我猜它是权限问题。

尝试使用PHP中的mkdir创建一个文件夹,以便PHP是所有者(可以这么说)并尝试使用您的函数删除它。

如果有效,则是权限/所有者问题。

答案 2 :(得分:0)

您可以尝试使用此代码

<?php
$files = glob('application/*'); foreach($files as $file){  if(is_file($file)) unlink($file);  }
?>

或者,

   function viewDir($path) {
    return is_file($path) ?
            @unlink($path) :
            array_map(__FUNCTION__, glob($path.'/*')) == @rmdir($path);
}
$dir=$_SERVER["DOCUMENT_ROOT"]."/xxxx/xxxx";
echo $dir;
viewDir($dir);

答案 3 :(得分:0)

可能是某些文件是使用像fopen这样的php打开的,那时它不会删除文件夹或目录。我尝试删除文件/文件夹时面临同样的问题

答案 4 :(得分:0)

尝试这样的事情。

<?php
function delete_directory($target) {
         if (is_dir($target))
           $dir_handle = opendir($target);
     if (!$dir_handle)
          return false;
     while($file = readdir($dir_handle)) {
           if ($file != "." && $file != "..") {
                if (!is_dir($dirname."/".$file))
                     unlink($dirname."/".$file);
                else
                     delete_directory($target.'/'.$file);
           }
     }
     closedir($dir_handle);
     rmdir($target);
     return true;
}

?>

希望这有帮助。

答案 5 :(得分:0)

尝试使用以下代码行删除一个或多个文件夹文件 希望对您有帮助

function deleteAll($str) {
        if (is_file($str)) {
            return unlink($str);
        }
        elseif (is_dir($str)) {
            $scan = glob(rtrim($str,'/').'/*');
            foreach($scan as $index=>$path) {
                $this->deleteAll($path);
            }            
            return @rmdir($str);
        }
    }