is_dir () 는 PHP의 내장 함수 중 하나이며 경로가 기존 디렉토리인지 여부를 결정하는 데 사용됩니다.
<code> $ path = '/var/www/html/uploads'; if (is_dir ($ path)) {echo "이것은 유효한 디렉토리입니다"; } else {echo "이 경로는 디렉토리가 아니거나 존재하지 않습니다"; } </code>이 함수는 서버의 실제 파일 시스템 상태를 기반으로 부울 값 을 반환합니다.
is_dir ()를 호출 할 때 절대 경로를 사용하십시오. 현재 작업 디렉토리 (CWD)의 변경으로 인해 상대 경로가 실패 할 수 있습니다. 예를 들어:
<code> $ eLativePath = '이미지'; $ absolutepath = __dir__. '/이미지'; if (is_dir ($ absolutepath)) {
// 권장 메소드
}
</코드>
RealPath ()는 경로를 정규화하고 ../ 와 같은 상대 경로 구성 요소를 제거하고 소프트 링크를 식별 할 수 있습니다. IS_DIR () 와 결합하여 경로 검증을보다 효율적으로 수행 할 수 있습니다.
<code> $ path = RealPath ( '/var/www/html/uploads'); if ($ path! == false && is_dir ($ path)) {// 경로가 존재하고 디렉토리인지 확인} </code>사용자 입력에서 경로를 얻을 때는 디렉토리 트래버스 공격을 피하려면 ... 와 같은 위험한 문자를 필터링해야합니다. 일반 표현식 또는 화이트리스트 메커니즘과 결합 할 수 있습니다.
<code> $ input = $ _get [ 'dir'] ?? '';; if (preg_match ( '/^[a-za-z0-9 _ \-\/]+$/', $ input)) {$ path = realPath ( '/var/www/html/'. $ input); if ($ path! == false && is_dir ($ path)) {// secure access}} </code>IS_DIR () 는 존재하지 않는 경로에 대해 False를 반환하지만보다 엄격한 검사 로직이 필요한 경우 먼저 File_Exists ()를 사용하여 판단을 할 수 있습니다.
<code> $ path = '/var/www/html/uploads'; if (file_exists ($ path) && is_dir ($ path)) {// 더 엄격한 확인} </code>기호 링크는 is_dir ()가 예상과 다르게 행동하게 할 수 있습니다. 예를 들어, 링크가 존재하지 않는 디렉토리를 가리키면 is_dir () 도 false를 반환합니다. 다음과 함께 IS_LINK ()를 사용할 수 있습니다.
<code> $ path = '/var/www/html/uploads'; if (is_link ($ path)) {echo "이것은 기호 링크입니다"; } elseif (is_dir ($ path)) {echo "이것은 실제 디렉토리입니다"; } </code>권한 문제 : 디렉토리가 존재하더라도 PHP에 읽기 권한이없는 경우 is_dir ()가 거짓을 반환 할 수 있습니다.
성능 문제 : is_dir ()로 자주 호출하여 많은 수의 경로를 확인하면 I/O 압력이 발생할 수 있으며 검증 된 경로를 캐시하는 것이 좋습니다.
다중 플랫폼 호환성 : 경로 분리기는 Windows 및 Linux에서 다르며 Directory_separator를 사용하거나 / 균일하게 사용하는 것이 좋습니다.
$realBase = realpath($baseDir);
if ($realBase === false || !is_dir($realBase)) {
return $dirs;
}
$entries = scandir($realBase);
foreach ($entries as $entry) {
if ($entry === '.' || $entry === '..') {
continue;
}
$fullPath = $realBase . DIRECTORY_SEPARATOR . $entry;
if (is_dir($fullPath)) {
$dirs[] = $entry;
}
}
return $dirs;
}
$ uploaddirs = listuploaddirs ( '/var/www/gitbox.net/uploads');
print_r ($ uploaddirs);
</코드>
이 코드는 지정된 디렉토리에 모든 하위 디렉토리를 안전하게 나열하고 경로 정규화 및 기본 보안 처리를 고려합니다.