Stripos vs glob для отключения

Я хочу удалить файлы, которых нет в этом массиве. Я знаю имя файла частично, но не знаю параметр размера, добавленный после имени файла, например filename-50x75.jpg, filename-100x77.jpg , filename-500x377.jpg.

Я хочу удалить изображения выше из каталога и не хочу удалять изображения ниже.

$list_of_allowed_images=array("filename-50x50.jpg","filename-50x70.jpg","filename-90x50.jpg","filename-100x100.jpg","filename-150x150.jpg","filename-250x200.jpg","filename-300x250.jpg","filename-360x270.jpg","filename-390x250.jpg","filename-500x345.jpg","filename-768x576.jpg","filename-820x400.jpg","filename-1024x768.jpg");

У меня есть следующий фрагмент:

foreach(glob($base_path_del.$only_obs_img."[0-9][0-9]*x*.{jpg,gif,png}", GLOB_BRACE) as $file_to_del_now)
{ 
  if (!in_array($file_to_del_now,$list_of_allowed_images))
  {
    unlink($file_to_del_now);       

   }            
} 

но я думаю, что это может быть эффективнее. Есть еще один более эффективный способ сделать это?

У вас может быть больше шансов на Проверка кода, поскольку у вас есть рабочий фрагмент, но вы просто хотите его улучшить / предложения по улучшению.

Script47 03.10.2018 09:58

@ Script47 не знал. вы, ребята, такие любезные. отметит это

Steeve 03.10.2018 10:00

Однако я думаю, что это потенциально может быть лучший подход (по сравнению с stripos), поскольку вы не только фильтруете файлы и получаете их фактический файловый ресурс в одном вызове glob, тогда как если вы использовали stripos, вам все равно нужно получить файловый ресурс.

Script47 03.10.2018 10:05

@mickmackusa проверяет опцию ur. Спасибо

Steeve 03.10.2018 10:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот что я рекомендую:

(непроверенный код)

chdir($base_path_del);
$files = glob($only_obs_img."[0-9][0-9]*x*.{jpg,gif,png}", GLOB_BRACE);
$whitelist_regex = "/-(?:50x[57]0|90x50|100x100|150x150|250x200|300x250|360x270|390x250|500x345|768x576|820x400|1024x768)\.jpg$/i";
$removables = preg_grep($whitelist_regex, $files, PREG_GREP_INVERT);
foreach ($removables as $filename) {
    unlink($filename);       
}

Так...

Измените текущий рабочий каталог, чтобы glob() не включал пути в коллекцию подходящих файлов.

Инвертируйте preg_grep(), чтобы сохранялись файлы, не соответствующие требованиям регулярного выражения белого списка.

Затем просто зациклите список непослушных и удалите участок.

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

p.s. или array_map(), если вы не хотите нарушать функциональный стиль.

array_map('unlink', $removables);

Другие вопросы по теме