Как отсоединить () по его имени, не зная расширение файла? - PullRequest
3 голосов
/ 06 февраля 2012

Короче

У нас есть файл с именем clients.(unique parameter). И теперь мы хотим unlink(), но, поскольку мы не знаем расширение файла, как нам добиться успеха?

Более длинная история

У меня есть система кеширования, где запрос к БД в md5() - это имя файла, а срок действия кеша - расширение.

Пример: 896794414217d16423c6904d13e3b16d.3600

Но иногда срок годности меняется. Поэтому для окончательного решения расширение файла следует игнорировать.

Единственный способ, которым я мог придумать, - это искать в каталоге и сопоставлять имена файлов, а затем получать расширение файла.

Ответы [ 2 ]

9 голосов
/ 06 февраля 2012

Используйте glob():

$files = glob("/path/to/clients.*");
foreach ($files as $file) {
  unlink($file);
}

Если вам нужно, вы можете проверить filemtime() каждого файла, возвращенного glob(), чтобы отсортировать их так, чтобыНапример, вы удаляете только самую старую версию.

// Example: Delete those older than 2 days:
$files = glob("./clients.*");
foreach ($files as $file) {
   if (filemtime($file) < time() - (86400 * 2)) {
     unlink($file);
   }
}
1 голос
/ 06 февраля 2012

Вы правы, пытаясь найти в каталоге подходящее имя файла.Существует несколько подходов, которые вы можете использовать:

readdir соответствующая папка

glob в соответствии с предложением Micheal

Вы также можете получить вывод ls {$target_dir} | grep {$file_first_part}и затем отсоедините полученную строку (при условии, что совпадение найдено).

...