source

여러 파일 확장명을 나열하는 PHP 파일

factcode 2023. 9. 6. 22:23
반응형

여러 파일 확장명을 나열하는 PHP 파일

현재 코드는 다음과 같습니다.

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

이 정도면 잘 됩니다.하지만 .png, gif 등 다른 이미지 타입을 나열하고 싶습니다.

위 코드를 수정해서 작동시킬 수 있도록 도와주실 수 있을까요?저는 다음을 시도해 보았지만 성공하지 못했습니다.

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

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

그리고 다른 변형들도...

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

05 2021

이것은 단지 @Jeroen 답변의 확장일 뿐입니다.

명심해야 할 것들

'플래그'가 중요합니다.

곱슬곱슬한 괄호를 사용하고 있으니 참고하시기 바랍니다.GLOB_BRACE필요합니다.플래그가 없으면 빈 항목 배열을 얻을 수 있습니다.

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

소팅

이렇게 하면 작성한 방식으로 파일을 정렬하는 데도 도움이 됩니다.
아래 정렬은 컬리 브래킷 내부의 확장 순서를 기준으로 합니다.

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

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

+ 보너스

폴더가 없어도 파일을 모두 나열해야 하는 경우 이를 사용할 수 있습니다.

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

GLOB_BRACE를 사용하는 것보다 훨씬 쉬운 솔루션을 찾았는데 대소문자를 구분하지 않습니다.

$files = array_filter(glob('path/*.*'), function ($filename) { return preg_match('/\.(jpe?g|png|gif)$/i', $filename); });
sort($files);

아니면 그냥 이렇게 할 수도 있습니다.

$files = preg_grep('/\.(jpe?g|png|gif)$/i', glob('path/*.*'));
sort($files);

내 돈 2센트만 줘요 여기 있는 사람들에게 도움이 되길 바라요

나의 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)

이 기능을 사용하면 부적절한 사례 사용에 대한 걱정 없이 원하는 모든 확장 프로그램의 배열을 만들 수 있습니다.도움이 되길 바랍니다.

저는 단지 제 프로젝트를 위해 이것이 필요했습니다.배열에서 문자열로 변환기를 만들었습니다.

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

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

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

  return $str;
}

사용.

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

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

언급URL : https://stackoverflow.com/questions/10591530/php-file-listing-multiple-file-extensions

반응형