PHP 개발에서 is_dir ()는 지정된 경로가 디렉토리인지 여부를 감지하는 일반적으로 사용되는 기능입니다. 지정된 경로가 유효한 디렉토리 인 경우 함수는 true를 반환합니다. 그렇지 않으면, 거짓 . 그러나 실제 개발 과정에서 경로가 법적 디렉토리인지 확신하더라도 IS_DIR ()가 False를 반환하는 상황이 발생할 수 있습니다. 현재, 당신은 혼란 스러울 수 있으며 그것을 해결하는 방법을 모릅니다. 이 기사는 IS_DIR () 가 False를 반환하고 해당 솔루션을 제공하는 몇 가지 일반적인 문제를 탐색합니다.
php의 is_dir () 함수는 상대 또는 절대 경로를 허용합니다. 상대 경로를 사용하는 경우 경로는 스크립트가 현재 실행중인 작업 디렉토리와 관련이 있습니다. 작업 디렉토리가 예상과는 다른 경우 is_dir ()가 올바른 디렉토리를 찾지 못하여 거짓을 반환 할 수 있습니다.
IS_DIR () 로 전달하는 경로가 특히 상대 경로를 사용할 때 정확한지 확인하고 확인하십시오. getCWD () 함수를 사용하여 현재 작업 디렉토리를 가져 와서 경로가 일치하는지 확인할 수 있습니다. 원한다면 절대 경로를 사용해 볼 수 있습니다.
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">getcwd</span></span><span>(); </span><span><span class="hljs-comment">// 현재 작업 디렉토리를 얻으십시오</span></span><span>
</span></span>
경로가 올바른 경우에도 PHP 스크립트에 디렉토리에 액세스하기에 충분한 권한이없는 경우 is_dir ()가 거짓을 반환합니다. 특히 Linux 또는 MacOS 환경에서 디렉토리의 읽기 권한이 제한 될 수 있습니다.
PHP 스크립트에 디렉토리를 읽을 수있는 권한이 있는지 확인하려면 대상 디렉토리의 권한을 확인하십시오. ls -l (linux) 또는 chmod 와 같은 명령을 통해 권한을 확인하고 수정할 수 있습니다. 원한다면 CHMOD를 사용하여 권한을 변경하려고 시도 할 수 있습니다.
<span><span><span class="hljs-built_in">chmod</span></span><span> 755 /path/to/directory
</span></span>
Windows에서는 PHP 스크립트를 실행하는 사용자 계정에 충분한 액세스 권한이 있는지 확인하십시오.
들어오는 경로가 실제 디렉토리를 가리키지 않으면 is_dir ()는 자연스럽게 false를 반환합니다. 때로는 경로가 정확할 수 있지만 특히 프로그램이 디렉토리를 동적으로 생성 할 때 디렉토리가 실제로 존재하지 않습니다.
IS_DIR ()을 호출하기 전에 file_exists () 함수를 사용하여 경로가 존재하는지 확인하십시오. 두 기능을 조합하여 사용하고 먼저 경로가 존재하는지 확인한 다음 디렉토리인지 여부를 추가로 결정할 수 있습니다.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>) && </span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>)) {
</span><span><span class="hljs-comment">// 디렉토리가 존재합니다</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// 디렉토리가 존재하지 않거나 경로는 디렉토리가 아닙니다.</span></span><span>
}
</span></span>
IS_DIR () 로 전달하는 경로가 소프트 링크 또는 기호 링크 인 경우 is_dir ()는 기본적으로 False를 반환합니다. 링크가 가리키는 대상이 아니라 실제 디렉토리 경로 만 감지하므로.
기호 링크를 처리 해야하는 경우 IS_LINK () 함수를 사용하여 기호 링크인지 판단하고 readLink ()를 사용하여 기호 링크가 지적되는 대상 경로를 얻을 수 있습니다. 이 두 기능을 결합하면 소프트 링크 문제를보다 정확하게 처리 할 수 있습니다.
<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">"Symbolic link points to: <span class="hljs-subst">$target</span></span></span><span>";
} </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_dir</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">"This is a valid directory."</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is neither a symbolic link nor a directory."</span></span><span>;
}
</span></span>
경로에 특수 문자 (예 : 공백, 중국어 또는 기타 비 ASCII 문자)가 포함 된 경우 IS_DIR ()가 일부 환경, 특히 Windows 시스템에서 경로를 올바르게 인식하지 못하게 할 수 있습니다.
경로의 특수 문자가 올바르게 처리되어 있는지 확인하십시오. RealPath () 함수를 사용하여 경로를 정규화하고 상징적 링크, 상대 경로 등을 제거하여 경로의 정확성을 보장 할 수 있습니다.
<span><span><span class="hljs-variable">$realPath</span></span><span> = </span><span><span class="hljs-title function_ invoke__">realpath</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$realPath</span></span><span> && </span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-variable">$realPath</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is a valid directory."</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is not a valid directory."</span></span><span>;
}
</span></span>
다른 운영 체제는 경로를 다르게 처리 할 수 있습니다. 예를 들어, Windows Systems에서 경로의 구분 기자는 백 슬래시 ( \ )이며, UNIX와 같은 시스템에서 경로의 구분 기는 전진 슬래시 ( / )입니다. 이 플랫폼 차이로 인해 is_dir ()가 예상치 못한 결과를 반환 할 수 있습니다.
경로를 처리 할 때 Directory_Separator Constant를 사용하여 코드의 크로스 플랫폼 호환성을 보장 할 수 있습니다. 이러한 방식으로 코드는 다른 운영 체제에 따라 올바른 경로 분리기를 자동으로 사용할 수 있습니다.
<span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-string">'folder'</span></span><span> . DIRECTORY_SEPARATOR . </span><span><span class="hljs-string">'subfolder'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_dir</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">"This is a valid directory."</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is not a valid directory."</span></span><span>;
}
</span></span>
일부 프레임 워크 또는 컨텐츠 관리 시스템 (CMS)에는 캐싱 메커니즘이 존재할 수 있습니다. 디렉토리 구조를 수정했지만 시스템이 여전히 캐시를 사용하는 경우 IS_DIR ()가 오래된 결과를 반환 할 수 있습니다.
캐시를 지우거나 캐시 기능을 비활성화하여 최신 디렉토리 구조를 확인하고 있는지 확인하십시오. 개발 중에, 특히 디버깅 중에 모든 관련 캐시가 새로 고침되어 있는지 확인하십시오.
PHP 개발에서 is_dir ()가 거짓을 반환하는 이유는 다각화 될 수 있습니다. 자주 묻는 질문에는 경로 형식 오류, 권한 문제, 디렉토리 비 존재, 기호 링크, 특수 문자 문제, 운영 체제 차이 및 캐싱 문제가 포함됩니다. 이러한 문제는 종종 경로, 권한, 시스템 구성 및 기타 환경 요인을 신중하게 검사함으로써 해결할 수 있습니다. RealPath () , file_exists () 및 is_link () 와 같은 일부 전처리 함수를 사용하면 문제를보다 정확하게 찾아서 해당 솔루션을 사용할 수 있습니다.