현재 위치: > 최신 기사 목록> Scandir 함수를 사용하여 숨겨진 파일을 나열하는 방법은 무엇입니까? 단계별로 구현하는 방법을 가르쳐주십시오

Scandir 함수를 사용하여 숨겨진 파일을 나열하는 방법은 무엇입니까? 단계별로 구현하는 방법을 가르쳐주십시오

gitbox 2025-09-02

PHP에서 Scandir 함수는 모든 파일과 폴더를 디렉토리에 나열하는 매우 일반적인 기능입니다. 기본적으로 숨겨진 파일 (도트로 시작하는 파일 또는 폴더 ) 을 나열하지 않습니다. 이로 인해 디렉토리에 모든 것을 나열해야 할 때 (숨겨진 파일 포함) 어떻게해야합니까? 이 기사에서는 Scandir 기능을 사용하여 숨겨진 파일을 나열하는 방법을 이해하기 위해 단계별로 진행됩니다.

1. Scandir 기능 소개

Scandir 함수의 기본 구문은 다음과 같습니다.

 <span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>, </span><span><span class="hljs-variable">$sorting_order</span></span><span>);
</span></span>
  • $ 디렉토리 : 파일을 나열 해야하는 디렉토리 경로를 지정합니다.

  • $ sorting_order : 선택 사항, 정렬 방법을 지정하면 기본값이 오름차순 순서입니다.

이 함수는 디렉토리의 파일 및 폴더 이름이 포함 된 배열을 반환합니다. 액세스 권한이 없거나 디렉토리가 존재하지 않으면 거짓을 반환합니다.

2. 기본적으로 Scandir는 숨겨진 파일을 나열하지 않습니다

다음 코드를 실행하는 경우 :

 <span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-string">'/path/to/directory'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>);
</span></span>

결과는 다음과 유사한 출력 일 수 있습니다.

 <span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; .
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; ..
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; file1.txt
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; folder1
    [</span><span><span class="hljs-meta">4</span></span><span>] =&gt; file2.txt
)
</span></span>

보시다시피, 디렉토리의 숨겨진 파일 (예 : .env 파일)은 나열되지 않고 현재 디렉토리 만 있습니다 . 부모 디렉토리 .. 가 나열되어 있습니다.

3. 숨겨진 파일을 나열하는 방법은 무엇입니까?

Scandir 목록 숨겨진 파일을 만들려면 두 가지 방법으로 수행 할 수 있습니다. 하나는 사용자 정의 필터링 방법을 사용하고 다른 하나는 Scandir가 반환 한 배열을 결합하여 필터링하는 것입니다.

방법 1 : 사용자 정의 필터링

필터를 사용자 정의하고 Scandir 가 다시 시작한 파일 이름이 시작되는지 수동으로 확인할 수 있습니다 . 그런 다음 필요에 따라 유지 해야하는지 결정하십시오.

 <span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>);

</span><span><span class="hljs-comment">// 사용 array_filter 숨겨진 파일을 필터링하십시오</span></span><span>
</span><span><span class="hljs-variable">$allFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>, function(</span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] === </span><span><span class="hljs-string">'.'</span></span><span> || </span><span><span class="hljs-variable">$file</span></span><span> !== </span><span><span class="hljs-string">'.'</span></span><span> &amp;&amp; </span><span><span class="hljs-variable">$file</span></span><span> !== </span><span><span class="hljs-string">'..'</span></span><span>;
});

</span><span><span class="hljs-comment">// 모든 파일과 폴더를 출력합니다(숨겨진 파일이 포함되어 있습니다)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$allFiles</span></span><span>);
</span></span>

이 예에서는 array_filter를 사용하여 파일을 시작하여 (예 : 숨겨진 파일) 파일필터링 하고 그리고 .. 디렉토리는 포함되지 않습니다.

방법 2 : Scandir 결합 결과 결과 및 글로벌 기능을 반환합니다.

또 다른 일반적인 관행은이 메소드와 함께 Glob 함수를 사용하는 것입니다.이 방법은 숨겨진 파일을 포함한 특정 유형의 파일을 패턴 매칭을 통해 나열 할 수 있습니다.

 <span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
</span><span><span class="hljs-variable">$allFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge</span></span><span>(</span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>), </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span> . </span><span><span class="hljs-string">'/.*'</span></span><span>));

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$allFiles</span></span><span>);
</span></span>

이런 식으로 Glob은 패턴과 일치하는 모든 숨겨진 파일 ( 예 : 시작 파일)을 나열하고 Scandir 가 반환 한 결과와 병합됩니다.

4. 반환 된 파일을 필터링하고 처리합니다

특정 파일 제외 또는 파일 정렬과 같은 나열된 숨겨진 파일에 대해 더 많은 작업을 수행하려면 Scandir 가 반환 한 배열을 처리 할 수 ​​있습니다.

예를 들어 .git 으로 시작하는 모든 숨겨진 파일을 제외하십시오.

 <span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>);

</span><span><span class="hljs-variable">$filteredFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>, function(</span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] !== </span><span><span class="hljs-string">'.'</span></span><span> || </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-string">'.git'</span></span><span>) !== </span><span><span class="hljs-number">0</span></span><span>;
});

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$filteredFiles</span></span><span>);
</span></span>

5. 요약

위의 두 가지 방법을 통해 Scandir 함수를 유연하게 사용하여 숨겨진 파일을 나열 할 수 있습니다. 사용자 정의 필터링 방법을 사용하든 글로벌 기능을 결합하든 PHP의 숨겨진 파일을 포함하여 디렉토리에서 모든 파일과 폴더를 성공적으로 얻을 수 있습니다. 실제 개발에서 숨겨진 파일을 처리하는 적절한 방법을 선택하면 파일의 읽기 및 작동을보다 잘 제어 할 수 있습니다.