2009-08-13 85 views
5

此問題與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

回答

7

這是唯一可行的解​​決方案,它可以在所有驅動器中使用。

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

7

爲什麼不建立一個文件夾並命名爲「回收站」..然後,而不是做一個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

0

這適用於我,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; 
} 
相關問題