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

код выше не работает, но я вижу какой-то код, как это ниже работает просто отличноУдалить файлы, которые имеют тот же префикс

unlink('*.jpg'); 

почему? Мне интересно, это будет работать?

unlink('*.*'); 

Как удалить файлы, которые начинаются с той же строки? например

same123.jpg 
sametoo.png 
samexxx.gif 

все они начинаются со строки "same", но заканчивается разным расширением, как это сделать?

У меня есть дешевый способ сделать это, но мне интересно, есть ли лучшее решение?

ответ

47

Попробуйте этот код:

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

P.S. glob() требует PHP 4.3.0+

+1

спасибо за ответ, ставка иа хороший день – castiel

+0

Hi Шиванский, пожалуйста, вы можете уточнить это для меня? Означает ли это, что проблема заключается в том, что 'unlink()' принимает файл _name_, а не файл _pattern_ (и, следовательно, 'glob()' требуется для поиска всех файлов _names_ на основе _pattern_)? Все это имеет смысл, но тогда почему пример OP 'unlink ('*. Jpg');' работает нормально, если шаблоны неприемлемы для 'unlink()'? – Sepster

+0

'glob()' будет перечислять все имена файлов на основе '$ mask'. По 'array_map()' функция 'unlink' будет загружаться один раз для каждого имени файла, указанного в' glob() '. – Raptor

21

Для этого вы можете использовать glob. Что-то вроде этого (не проверял):

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

thank u, glob работает как шарм – castiel

+0

+1. Я считаю это более читаемым, чем шаблон 'array_map', предложенный @ShivanRaptor (и предпочитает не использовать функциональный' array_map' для императивных функций). – Sepster

+1

@catiel, ответ Шивана Раптора короче. – sectus

Смежные вопросы