2012-09-03 15 views
5

Sto lavorando su uno script php, in cui voglio eliminare alcuni file da una determinata cartella utilizzando il carattere jolly (*).
Ho trovato alcuni esempi di lavoro come this one, dove vengono utilizzate le funzioni unlink() e glob().Elimina file utilizzando caratteri jolly - exec vs unlink

Ora, mi stavo chiedendo, sarebbe anche corretto cancellare i file utilizzando la funzione exec e un comando come rm -f /path/to/folder/_prefix_*?
Ci sono rischi per la sicurezza adottati?
E se è ok, sarebbe meglio in termini di prestazioni?

MODIFICA:
Quindi, dalle prime risposte posso vedere che effettivamente, utilizzando exec potrebbe essere una soluzione accettabile.
E i problemi di prestazioni? C'è qualche possibilità che l'opzione exec potrebbe essere migliore (più veloce/meno impegnativo) rispetto alla tecnica glob/unlink?

Grazie in anticipo

+1

rm andrebbe bene, i problemi di sicurezza dipendono da chi può eseguire lo script. –

risposta

8

Poiché non v'è alcuna possibilità per i dati forniti dall'utente da iniettare, non v'è alcun problema di sicurezza nell'uso exec sopra glob/unlink. Tuttavia, utilizzando glob/unlink consente di definire le eccezioni:

foreach(glob("delete/*") as $f) { 
    if($f == "delete/notme.txt") continue; 
    unlink($f); 
} 

E exec è spesso disattivata su server condivisi in modo glob/unlink è più portabile. Se hai una configurazione dedicata e non intendi rinunciare, non devi preoccuparti di questo.

+0

Grazie per aver risposto Kolink. Sono su un server di proprietà e exec è abilitato e funziona bene. Pensi che potrebbe fare la differenza nelle prestazioni usando una tecnica rispetto all'altra? – CrisDeBlonde

+0

Immagino che 'exec' sia più veloce, ma' glob/unlink' permette allo script di sapere sempre cosa sta succedendo - utile per le applicazioni della console più che basate sul web, ma puoi anche ottenere un rapporto di errore per ogni file o elenca i file cancellati ... –

1

Entrambe le opzioni potrebbero andare bene. Tuttavia, se non si controlla il proprio server o si è in hosting condiviso, il comando exec non può essere disponibile.

Per essere sul lato di salvataggio, utilizzare glob e scollegare.