2009-08-13 68 views
5

この質問は、PHP5のWindowsインストールに関連しています。ごみ箱にファイルを移動する(PHP)

ファイルunlink()を実行すると、回復が困難になります。

代わりに、ファイルをごみ箱に移動したい(exec()を実行せずに)。

ご存知ですか?

ありがとうございました。

+0

与えられた解決策を簡略化するためのちょっとした説明。 * is_file *と* is_array *の両方がブール値を返します(真または偽)。 ===と真と偽を比較することは冗長です。 * $ var = is_array($ arr)のように、私が悪化しているのを見たことがありますか?真:偽、*でもまだ... –

答えて

7

これはすべてのドライブで動作し、移植可能な唯一のソリューションです。 、

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

が可能でなければなりませんごみ箱から復元しかし、私はそれをテストしていませんでした:

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

削除されたファイルが正しくたとえばに移動されます。

EDIT:この機能は、相対パスのあるファイルで動作するように更新されました。

+0

こんにちは、機能のおかげで。残念ながら、それは私のために働いていません(ファイルが消えますが、私はどこにそれがシステムフォルダ[ドライブ]にありません:\ RECYCLER \\)):(OSがファイルを "ごみ箱"に移動すると、システムファイルにデータが書き込まれています。DOSコマンドでexec()を実行する必要があります。 – Toto

+0

私もXP上にあり、この機能は私のためにうまくいきます。ファイルはごみ箱に表示され、私も見ることができます。たとえば、Cにあるファイルを削除する場合は、「隠しフォルダを表示」を有効にしてから、C:\ RECYCLER \ __ SOMETHING __ \を参照してください。ファイルがそこにある必要があります。 。ごみ箱にも表示されます。 –

+0

相対パスで作業が必要でした。それでも動作しないか教えてください。 –

7

あなたはただ1つのフォルダを作成し、それを "ごみ箱"と呼んでいないのですが、unlink()を実行する代わりに、この "ごみ箱"フォルダにファイルを移動しますか?

ファイルを移動する場合は、rename() php関数を使用してください。

その後、あなたは私はこれが役に立てば幸い等のより古い10日、たとえば、

のファイルの時間をチェックしてから、ファイルを削除することができcronスクリプトを実行することができます。

+0

確かに、それは同じ原則です。ごみ箱は、ファイルを実行できないマップであるだけです。 「削除済み」ファイルは依然として存在し、依然としてごみ箱内の同じスペースを占有します。 – KdgDev

+0

しかし、リサイクルビンからの復元はありません。 –

+2

私の特定のニーズでは、env。 Windowsのみです。ファイルがごみ箱に移動された場合、リサイクルファイルとして認識されるため、他のバイナリツール(WinSCP、エクスプローラなど)とのやりとりができます。私のアプリケーションの "ごみ箱"は私にこれらの機能をすべて提供するものではなく、すでにOSに組み込まれている機能をコード化する必要があります。 :) – Toto

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; 
} 
関連する問題