【问题标题】:Delete folder in php在php中删除文件夹
【发布时间】:2011-04-07 13:56:49
【问题描述】:

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

函数删除($path)
{
    if (is_dir($path) === true)
    {
        $files = array_diff(scandir($path), array('.', '..'));

        foreach ($files 作为 $file)
        {
                删除(realpath($path) . '/' . $file);
        }

        返回 rmdir($path);
    }

    否则 if (is_file($path) === true)
    {
        返回取消链接($路径);
    }

    返回假;
}

删除('tmp');

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

【问题讨论】:

  • 任何错误信息?你应该得到一些。
  • 尝试在顶部添加ini_set('display_errors', 1); error_reporting(E_ALL);,看看是否会出现任何错误。
  • 没有。依然没有。只是一些我期待的通知消息。但它们并不相关。

标签: php


【解决方案1】:

试试这行代码删除一个文件夹或文件夹文件 希望对你有帮助

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

【讨论】:

    【解决方案2】:

    试试这样的。

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

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      可能有些文件是用 php 像 fopen 打开的,那个时候它不会删除文件夹或目录。我尝试删除文件/文件夹时遇到了同样的问题

      【讨论】:

        【解决方案4】:

        你可以试试这个代码

        <?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);
        

        【讨论】:

          【解决方案5】:

          使用这个:

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

          【讨论】:

            【解决方案6】:

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

            通常我只是猜测这是一个权限问题。

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

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

            【讨论】:

            • 我试过这个:if(mkdir("tmp", 0777)) echo('works');否则回声(“不”);如果(删除('tmp'))回声('是');否则回声('否');但什么也没有发生。它不是在制作文件夹。它什么也没显示。
            • 您确定您的主机允许这些功能吗?
            • 是的,我刚刚尝试创建一个新的 php 文件并使用新的 php 文件创建一个文件夹。有效。有趣的是,尽管我使用了 mkdir("tmp",0777) 它创建了一个具有 0755 权限的 tmp 文件夹,这是默认的。我是不是用错了 mkdir 函数?权限值应该用引号引起来吗?
            猜你喜欢
            • 1970-01-01
            • 2015-08-16
            • 2011-07-24
            • 2010-11-24
            • 2013-03-20
            • 2015-04-24
            • 2018-05-25
            • 2012-02-23
            • 1970-01-01
            相关资源
            最近更新 更多