Подтвердить что ты не робот

PHP файл с несколькими расширениями файлов

Вот мой текущий код:

$files = glob("*.jpg");

Это прекрасно работает. Тем не менее, я хочу перечислить другие типы изображений, такие как .png, gif и т.д.

Могу ли я, пожалуйста, помочь изменить этот выше код, чтобы он работал. Я пробовал следующее без успеха:

$files = glob("*.jpg","*.png","*.gif");

$files = glob("*.jpg,*.png,*.gif);

И другие варианты...

4b9b3361

Ответ 1

$files = glob("*.{jpg,png,gif}", GLOB_BRACE);

Ответ 2

Мои два цента:

$availableImageFormats = [
"png",
"jpg",
"jpeg",
"gif"];
$searchDir = /*yourDir*/;
$imageExtensions = "{";
foreach ($availableImageFormats as $extension) {
    $extensionChars = str_split($extension);
    $rgxPartial = null;
    foreach ($extensionChars as $char) {
        $rgxPartial .= "[".strtoupper($char).strtolower($char)."]";
    }
    $rgxPartial .= ",";
    $imageExtensions .= $rgxPartial;
};
$imageExtensions .= "}";
glob($searchDir."/*.".$imageExtensions, GLOB_BRACE)

С этим вы можете создать массив всех расширений, которые вы ищете, не беспокоясь о неправильном использовании. Надеюсь, это поможет

Ответ 3

Мне просто нужно это для моего собственного проекта. Я сделал преобразователь из массива в строку.

function whitelistToBrace($whitelist) {
  $str = "{";
  $whitelist = !empty($whitelist) ? $whitelist : ['*'];

  foreach($whitelist as $extension) {
    $str .= '*.' . strtolower($extension) . ',';
  };

  $str = substr($str, 0, -1) . '}';

  return $str;
}

Usage

Usage
$whitelist = [
  'png',
  'jpg'
];

// glob('my/path/*.{*.png,*.jpg}', GLOB_BRACE);
$glob = glob('my/path/' . whitelistToBrace($whitelist), GLOB_BRACE);
print_r($glob);