将文件移动到回收站(PHP)

问题描述:

此问题与PHP5的Windows安装有关。将文件移动到回收站(PHP)

执行文件unlink()会导致恢复困难。

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

你有什么想法吗?

感谢您的帮助。

+0

只是一个澄清,以简化给定的解决方案。 * is_file *和* is_array *返回布尔值(即true或false)。将它与===比较为true或false是多余的。尽管我看起来更糟,例如* $ var = is_array($ arr)? true:false; *但仍然... – 2011-06-21 03:40:48

这是唯一可行的解​​决方案,它可以在所有驱动器中使用。

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 

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

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

+0

嗨,感谢您的功能。不幸的是,它不适用于我(文件消失,但我不知道在哪里,它不在系统文件夹[DRIVE]:\ RECYCLER \\)。):(看起来(纠正我,如果我错了)当我们将文件移动到“回收站”时,OS正在将一些数据写入系统文件中。也许我应该使用一些DOS命令来执行exec()。)顺便说一句,我在XP上。 – Toto 2009-08-14 19:41:17

+0

我也在XP上,这个功能对我来说很好,文件显示在回收站,我也可以看到它。例如,如果要删除位于C中的文件,请确保启用“显示隐藏文件夹”,然后浏览到C:\ RECYCLER \ __ SOMETHING __ \文件应该在那里,对于其他驱动器也是如此(Windows默认行为) 。它也应该出现在回收站中。 – 2009-08-14 20:03:49

+0

它需要一些相对路径上的工作,现在应该工作得很好。告诉我它是否仍然无效。 – 2009-08-14 20:06:20

为什么不建立一个文件夹并命名为“回收站”..然后,而不是做一个unlink()..只是将文件移动到这个“回收站”文件夹?

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

后来的后来,你可以运行一个cron脚本,它检查文件的时间,然后你可以删除文件,比方说,早于10天等

我希望这有助于。

+0

确实,这是相同的原理。回收站不过是一个无法执行文件的地图。 “已删除”文件仍然存在,仍然占用回收站中的相同空间。 – KdgDev 2009-08-13 10:16:46

+0

虽然没有从Recyble Bin中恢复.. – 2009-08-13 10:59:46

+2

在我的具体需求中,env。仅限Windows。如果文件被移动到回收站,我可以更好地与其他二进制工具(WinSCP,资源管理器等)进行交互,因为它们被识别为回收文件。我的应用程序中的“回收站”不会为我提供所有这些功能,而且我必须编写已经在OS中的功能。 :) – Toto 2009-08-13 17:19:44

这适用于我,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; 
}