2013-03-18 15 views
22
$prefix = 'something_prefix'; 
unlink($prefix.'.*'); 

il codice di cui sopra non funziona, ma vedo qualche codice come questo qui sotto funziona beneEliminare i file che ha lo stesso prefisso

unlink('*.jpg'); 

perché? Mi chiedo se questo funzionerà?

unlink('*.*'); 

come eliminare i file che iniziano con la stessa stringa? così

same123.jpg 
sametoo.png 
samexxx.gif 

iniziano tutti con la stringa "same" ma termina con un'estensione diversa, come fare?

Ho già un modo economico per farlo, ma mi chiedo se esiste una soluzione migliore?

risposta

47

Prova di questo codice:

$mask = 'your_prefix_*.*'; 
array_map('unlink', glob($mask)); 

P.S. glob() richiede PHP 4.3.0+

+1

grazie per la risposta, offerta di u una buona giornata – castiel

+0

Hi Shivan, si può chiarire questo per me? Significa che il problema è che 'unlink()' accetta un file _name_, piuttosto che un file _pattern_ (e quindi 'glob()' è richiesto per trovare tutti i file _names_ basati su _pattern_)? Tutto ciò ha senso, ma allora perché l'OP '' unlink ('*. Jpg'); 'esempio funziona OK se i pattern non sono accettabili per' unlink() '? – Sepster

+0

'glob()' elencherà tutti i nomi di file basati su '$ mask'. Con 'array_map()', la funzione 'unlink' verrà caricata una volta per ogni nome di file elencato da' glob() '. – Raptor

21

Per questo è possibile utilizzare glob. Qualcosa di simile a questo (non testarlo):

foreach (glob("something_prefix*.*") as $filename) { 
    unlink($filename); 
} 
+0

grazie, glob funziona come un fascino – castiel

+0

+1. Trovo questo più leggibile rispetto al pattern 'array_map' suggerito da @ShivanRaptor (e preferisco non usare il funzionale' array_map' per le funzioni imperative). – Sepster

+1

@catiel, la risposta di Shivan Raptor è più breve. – sectus