2009-08-13 23 views
5

Questa domanda è correlata a un'installazione di Windows di PHP5.Spostamento di un file nel Cestino (PHP)

Fare un file unlink() rende difficile il recupero.

Invece vorrei spostare il file nel Cestino (senza fare un exec()).

Avete qualche idea?

Grazie per il vostro aiuto.

+0

Solo un chiarimento per semplificare la soluzione data. Sia * is_file * che * is_array * restituiscono un valore booleano (cioè vero o falso). Confrontandolo con === con vero o falso è ridondante. Anche se ho visto di peggio, come * $ var = is_array ($ arr)? true: false; * ma comunque ... –

risposta

7

Questa è l'unica soluzione che funziona ed è portatile in tutte le unità.

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

i file eliminati vengono spostati in modo corretto, per esempio:

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

Ripristina dal Cestino dovrebbe essere possibile, ma non ho testato.

EDIT: Ho appena aggiornato questa funzione per lavorare con file che hanno percorsi relativi.

+0

Ciao, grazie per la funzione. Sfortunatamente, non funziona per me (il file scompare ma non so dove. Non si trova nella cartella di sistema [DRIVE]: \ RECYCLER \\).) :(Sembra (correggimi se sbaglio) che il Il sistema operativo sta scrivendo alcuni dati in un file di sistema quando spostiamo il file nel "cestino". Forse dovrei fare un exec() con qualche comando DOS. :) BTW I am on XP. – Toto

+0

Sono anche su XP e questa funzione funziona bene per me, il file si presenta sul Cestino e posso anche vederlo. Ad esempio, se stai cancellando un file che si trova in C: assicurati di abilitare "Mostra cartelle nascoste", quindi seleziona C: \ RECYCLER \ __ SOMETHING __ \ il file dovrebbe essere lì, lo stesso funziona anche per altre unità (comportamento predefinito di Windows) . Dovrebbe apparire anche nel Cestino. –

+0

Aveva bisogno di un po 'di lavoro sui percorsi relativi, ora dovrebbe funzionare bene. Dimmi se ancora non funziona. –

7

perché non basta creare una cartella e denominarla "Cestino" .. quindi invece di fare uno scollegamento() .. basta spostare i file in questa cartella "Cestino" ??

Se si desidera spostare un file, utilizzare la funzione php rename().

Poi più tardi è possibile eseguire uno script cron che controlla il tempo dei file e quindi è possibile eliminare i file, diciamo, più di 10 giorni, ecc

Spero che questo aiuta.

+0

In effetti, è lo stesso principio. Recycle Bin non è altro che una mappa in cui i file non possono essere eseguiti. I file "eliminati" esistono ancora e occupano ancora lo stesso spazio nel Cestino. – KdgDev

+0

Tuttavia non è stato ripristinato dal cestino. –

+2

Nelle mie specifiche esigenze, l'INV. è solo per Windows. Se i file vengono spostati nel cestino, posso interagire meglio con gli altri strumenti binari (WinSCP, Explorer, ecc.) In quanto vengono riconosciuti come file riciclati. Un "Cestino" nella mia applicazione non mi fornisce tutte queste funzioni e dovrei codificare funzioni che sono già presenti nel sistema operativo. :) – Toto

0

Questo funziona per me, using MaDdoGs CmdUtils, in Win7 x64, php 5.4.24. Anche con file di grandi dimensioni, nomi di file dispari, ...

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