将文件移动到回收站(PHP)
这是唯一可行的解决方案,它可以在所有驱动器中使用。
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 \\)。):(看起来(纠正我,如果我错了)当我们将文件移动到“回收站”时,OS正在将一些数据写入系统文件中。也许我应该使用一些DOS命令来执行exec()。)顺便说一句,我在XP上。 – Toto 2009-08-14 19:41:17
我也在XP上,这个功能对我来说很好,文件显示在回收站,我也可以看到它。例如,如果要删除位于C中的文件,请确保启用“显示隐藏文件夹”,然后浏览到C:\ RECYCLER \ __ SOMETHING __ \文件应该在那里,对于其他驱动器也是如此(Windows默认行为) 。它也应该出现在回收站中。 – 2009-08-14 20:03:49
它需要一些相对路径上的工作,现在应该工作得很好。告诉我它是否仍然无效。 – 2009-08-14 20:06:20
为什么不建立一个文件夹并命名为“回收站”..然后,而不是做一个unlink()..只是将文件移动到这个“回收站”文件夹?
如果您想移动文件,请使用rename() php函数。
后来的后来,你可以运行一个cron脚本,它检查文件的时间,然后你可以删除文件,比方说,早于10天等
我希望这有助于。
这适用于我,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;
}
只是一个澄清,以简化给定的解决方案。 * is_file *和* is_array *返回布尔值(即true或false)。将它与===比较为true或false是多余的。尽管我看起来更糟,例如* $ var = is_array($ arr)? true:false; *但仍然... – 2011-06-21 03:40:48