현재 위치: > 최신 기사 목록> Scandir를 통해 디렉토리와 해당 파일에 Symbolic Links를 나열하는 방법은 무엇입니까?

Scandir를 통해 디렉토리와 해당 파일에 Symbolic Links를 나열하는 방법은 무엇입니까?

gitbox 2025-09-09

PHP에서 Scandir 함수는 지정된 디렉토리에 모든 파일과 하위 디렉토리를 나열 할 수 있습니다. 그러나 Scandir는 파일과 디렉토리의 간단한 목록 만 반환하며 상징적 링크를 구분하지 않습니다. 디렉토리와 그들이 가리키는 대상 파일에 상징적 링크를 나열하려면 스캔 디르IS_LINKReadLink 함수를 사용하여 처리해야합니다.

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>

$ 디렉토리 매개 변수는 스캔 할 대상 디렉토리이며 리턴 값은 해당 디렉토리의 모든 파일 및 하위 디렉토리를 포함하는 배열입니다. Scandir 가 반환 한 목록에는 Special이 포함되어 있습니다 . 그리고 .. 현재 디렉토리와 부모 디렉토리를 각각 나타내는 .. 항목.

2. 상징적 링크를 걸러냅니다

파일 또는 디렉토리가 기호 링크인지 확인하려면 PHP의 IS_LINK 함수를 사용할 수 있습니다. 주어진 경로가 상징적 링크인지 확인합니다.

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$path</span></span></span><span> 상징적 링크입니다\n";
}
</span></span>

3. 상징적 링크가 가리키는 목표를 얻으십시오.

읽기 링크 함수를 사용하여 기호 링크가 가리키는 실제 파일 경로를 얻으십시오. 주어진 경로가 기호 링크 인 경우, readlink는 기호 링크의 대상 경로를 반환합니다. 그렇지 않으면 false를 반환합니다.

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>)) {
    </span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-title function_ invoke__">readlink</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$path</span></span></span><span> 정위 </span><span><span class="hljs-subst">$target</span></span><span>\n";
}
</span></span>

4. 코드 완료 예제 : 디렉토리 및 해당 파일에 상징적 링크를 나열합니다.

이제 위의 코드를 결합하여 지정된 디렉토리에 상징적 링크와 대상 파일을 나열 할 수 있습니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 스캔 할 디렉토리를 지정하십시오</span></span><span>
</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-comment">// 사용 scandir 디렉토리 목록을 가져옵니다</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">// 트래버스 디렉토리 목록</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$files</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-comment">// 들어오지 못하게 하다 . 그리고 .. 목</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file</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>) {
        </span><span><span class="hljs-keyword">continue</span></span><span>;
    }
    
    </span><span><span class="hljs-comment">// 완전한 파일 경로를 접합합니다</span></span><span>
    </span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-variable">$directory</span></span><span> . DIRECTORY_SEPARATOR . </span><span><span class="hljs-variable">$file</span></span><span>;
    
    </span><span><span class="hljs-comment">// 파일이 상징적 링크인지 확인하십시오</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
        </span><span><span class="hljs-comment">// 获取符号链接정위的目标文件</span></span><span>
        </span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-title function_ invoke__">readlink</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>);
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$file</span></span></span><span> 상징적 링크입니다,정위 </span><span><span class="hljs-subst">$target</span></span><span>\n";
    }
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

5. 코드 파싱

  • Scandir ($ directory) : 디렉토리에 모든 파일과 하위 디렉토리를 가져옵니다.

  • IS_LINK ($ FILEPATH) : 현재 파일이 상징적 링크인지 결정합니다.

  • readlink ($ filepath) : 상징적 링크가 가리키는 파일 경로를 가져옵니다.

6. 샘플 출력

디렉토리 /Path/To/Directory에 다음 내용이 있다고 가정합니다.

  • file1.txt (일반 파일)

  • symlink1 (symlink to /path/to/target1.txt )

  • symlink2 (symlink to /path/to/target2.txt )

위의 코드를 실행하면 출력이 다음과 같습니다.

 <span><span>symlink1 상징적 링크입니다,정위 /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/target1.txt
symlink2 상징적 링크입니다,정위 /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/target2.txt
</span></span>

7. 요약

ScandirIS_LinkReadLink 함수를 결합하여 지정된 디렉토리 및 해당 대상 파일에 상징적 링크를 쉽게 나열 할 수 있습니다. 이 접근법은 특히 복잡한 디렉토리 구조를 처리 할 때 파일 시스템의 상징적 링크를 더 잘 관리하고 분석하는 데 도움이됩니다.