【问题标题】:Deleting __MACOSX folder with PHP?用 PHP 删除 __MACOSX 文件夹?
【发布时间】:2010-11-24 19:32:02
【问题描述】:

有没有人有使用 PHP 删除 __MACOSX 文件夹的经验?

该文件夹是我解压缩档案后生成的,但我似乎无法删除它。

is_dir 函数在文件上返回 false,使递归删除脚本失败(因为存档内是“临时”文件),因此目录不为空。

我在 PHP5 中使用内置的 ZipArchive 类(extractTo 方法)。

我使用的 rmdir 脚本是我在 php.net 上找到的:

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

【问题讨论】:

    标签: php directory delete-directory


    【解决方案1】:

    您使用的是哪个操作系统和版本?


    您需要更正目录和文件的路径。

    // ensure $dir ends with a slash
    function delTree($dir) {
    
        foreach( $files as $file ){
            if( substr( $file, -1 ) == '/' )
                delTree( $dir.$file );
            else
                unlink( $dir.$file );
        }
        rmdir( $dir );
    }
    

    【讨论】:

    • 使用 MAC 10.5.8。服务器(我正在删除文件)正在使用 Ubuntu linux
    • 您是否从 shell 中解压缩了文件?还是用 PHP?文件夹的权限是什么?即:ls -l
    • 能否发布您的 PHP 代码,可能是您看不到的错误。
    【解决方案2】:

    我从http://www.php.net/rmdir 中找到了需要 PHP5 的函数的改进版本。

    • 此函数使用DIRECTORY_SEPARATOR 而不是/。 PHP 将DIRECTORY_SEPARATOR 定义为运行操作系统的正确字符('/' 或'\')。
    • 目录位置不需要以斜线结尾。
    • 函数在完成时返回truefalse
    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 2012-06-11
      • 2011-04-07
      • 2010-12-22
      • 1970-01-01
      • 2018-05-25
      • 2015-08-16
      相关资源
      最近更新 更多