【问题标题】:Moving a file to the Recycle Bin (PHP)将文件移动到回收站 (PHP)
【发布时间】:2009-08-13 10:02:10
【问题描述】:

这个问题与 PHP5 的 Windows 安装有关。

做一个文件unlink() 很难恢复。

相反,我想将文件移动到回收站(不执行exec())。

你有什么想法吗?

感谢您的帮助。

【问题讨论】:

  • 只是澄清一下以简化给定的解决方案。 is_fileis_array 都返回一个布尔值(即 true 或 false)。将其与 === 与 true 或 false 进行比较是多余的。虽然我见过更糟糕的情况,比如 $var = is_array($arr) ? true : false; 但仍然...

标签: php windows file


【解决方案1】:

这是唯一可行的解​​决方案,并且可以在所有驱动器中移植。

function Recycle($filename)
{
    if (is_file($filename) === true)
    {
        $filename = realpath($filename);
        $recycle = glob(current(explode('\\', $filename, 2)) . '\\RECYCLER\\*', GLOB_ONLYDIR);

        if (is_array($recycle) === true)
        {
            return rename($filename, current($recycle) '\\' . basename($filename));
        }
    }

    return false;
}

删除的文件被正确移动到例如:

O:\RECYCLER\S-1-5-21-1715567821-1390067357-1417001333-1003

从回收站恢复应该是可能的,但是我没有测试过。

编辑:我刚刚更新了这个函数来处理具有相对路径的文件。

【讨论】:

  • 您好,感谢您提供的功能。不幸的是,它对我不起作用(文件消失了,但我不知道在哪里。它不在系统文件夹 [DRIVE]:\RECYCLER\)中。):( 似乎(如果我错了,请纠正我)操作系统当我们将文件移动到“回收站”时,正在将一些数据写入系统文件。也许我应该使用一些 DOS 命令执行 exec()。:) 顺便说一句,我在 XP 上。
  • 我也在XP上,这个功能对我来说很好,文件显示在回收站中,我也可以看到它。例如,如果您要删除位于 C: 中的文件,请确保启用“显示隐藏文件夹”,然后浏览到 C:\RECYCLER__SOMETHING__\ 文件应该在那里,同样适用于其他驱动器(默认 Windows 行为)。它也应该出现在回收站中。
  • 它需要在相对路径上做一些工作,现在应该可以正常工作了。如果它仍然不起作用,请告诉我。
  • 这个看起来不错,但我必须做进一步的调查。 (它对我不起作用)。我怀疑我的操作系统有问题。谢谢。 :)
  • 这很奇怪,变量 $recycle 的值是多少?做 var_dump($recycle);并在此处发布结果。
【解决方案2】:

你为什么不只创建一个文件夹并将其命名为“回收站”.. 而不是执行 unlink() .. 只需将文件移动到这个“回收站”文件夹?

如果您想移动文件,请使用rename() php 函数。

然后你可以运行一个 cron 脚本来检查文件的时间,然后你可以删除文件,比如超过 10 天的文件等等。

我希望这会有所帮助。

【讨论】:

  • 其实原理是一样的。回收站不过是一张地图,里面的文件无法执行。 “已删除”的文件仍然存在,并且仍占用回收站中的相同空间。
  • 在我的特定需求中,env.仅适用于 Windows。如果文件被移动到回收站,我可以更好地与其他二进制工具(WinSCP、资源管理器等)进行交互,因为它们被识别为回收文件。我的应用程序中的“回收站”不会为我提供所有这些功能,我必须编写操作系统中已经存在的功能。 :)
【解决方案3】:

这对我有用,using MaDdoGs CmdUtils,在 Win7 x64,php 5.4.24 下。还有大文件,奇怪的文件名,...

function recycle($filename)
{
    if ( !is_file($filename) )
        return false;
    system( __DIR__.'/third-party/Recycle.exe -f "'.$filename.'"', $r );
    return $r;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2013-02-12
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多