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

powyższy kod nie działa, ale widzę jakiś kod jak ten poniżej działa dobrzeUsuwanie plików, który ma ten sam przedrostek

unlink('*.jpg'); 

dlaczego? Zastanawiam się, czy to zadziała?

unlink('*.*'); 

Jak usunąć pliki, które zaczynają od tego samego ciągu? tak jak ten

same123.jpg 
sametoo.png 
samexxx.gif 

wszystkie zaczynają się od napisu "ten sam", ale kończą się innym rozszerzeniem, jak to zrobić?

Jestem już na to przygotowany, ale zastanawiam się, czy istnieje jakieś lepsze rozwiązanie?

Odpowiedz

47

Spróbuj kod:

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

PS: glob() wymaga PHP 4.3.0+

+1

dziękuję za odpowiedź, składam dobry dzień – castiel

+0

Witaj Shivan, czy możesz mi to wyjaśnić? Czy to oznacza, że ​​problem polega na tym, że 'unlink()' akceptuje plik _name_, a nie plik _pattern_ (i stąd 'glob()' jest wymagany do znalezienia wszystkich plików _names_ na podstawie _pattern_)? To wszystko ma sens, ale dlaczego OP "unlink ('*. Jpg');" przykład działa poprawnie, jeśli wzorce nie są akceptowalne dla 'unlink()'? – Sepster

+0

'glob()' wyświetli wszystkie nazwy plików w oparciu o '$ mask'. Przez 'array_map()' funkcja 'unlink' będzie ładowana raz dla każdej nazwy pliku wymienionej przez' glob() '. – Raptor

21

Możesz użyć do tego glob. Coś takiego (nie przetestowałem):

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

dziękuję, glob działa jak urok – castiel

+0

+1. Uważam, że jest to bardziej czytelne niż wzór 'array_map' sugerowany przez @ShivanRaptor (i wolę nie używać funkcjonalnej' array_map' dla imperatywnych funkcji). – Sepster

+1

@catiel, odpowiedź Shivana Raptora jest krótsza. – sectus

Powiązane problemy