현재 위치: > 최신 기사 목록> IS_Readable 함수를 사용하여 파일 권한을 확인할 때 무시하기 쉬운 일반적인 함정은 무엇입니까?

IS_Readable 함수를 사용하여 파일 권한을 확인할 때 무시하기 쉬운 일반적인 함정은 무엇입니까?

gitbox 2025-08-27

1. 파일 존재와 권한 사이의 혼란

is_readable ()은 파일이 존재하지 않는지 또는 권한이 불충분한지 여부를 구별하지 않습니다. 예를 들어:

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'/path/to/nonexistent.txt'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)); </span><span><span class="hljs-comment">// 산출 false</span></span><span>
</span></span>

이 경우 잘못된 결과를 기준으로 처리하는 경우 잘못된 결과가 권한 문제라고 생각할 수 있으며 실제 파일이 전혀 존재하지 않습니다.

솔루션 : 먼저 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">$file</span></span><span>) &amp;&amp; </span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"파일이 존재하며 읽을 수 있습니다"</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">"파일이 존재하지 않거나 읽을 수 없습니다"</span></span><span>;
}
</span></span>

2. 상대 경로 및 작업 디렉토리 문제

is_readable ()는 PHP의 현재 작업 디렉토리와 관련된 경로를 사용합니다. 경로가 명확하지 않으면 체크 결과는 오류가 될 수 있습니다. 예를 들어:

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'data/file.txt'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>));
</span></span>

PHP 스크립트가 작동하고 예상 디렉토리가 다르면 False를 반환 할 수 있습니다. 이것은 많은 초보자들이 간과하기 쉬운 문제입니다.

해결 방법 : 절대 경로를 사용하거나 __dir__를 통해 현재 스크립트 디렉토리를 가져옵니다.

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/data/file.txt'</span></span><span>;
</span></span>

3. 기호 링크 및 권한 상속

is_readable ()는 상징적 링크 자체의 권한이 아니라 기호 링크 대상 파일의 가독성을 확인합니다. 즉, 기호 링크 권한이 액세스 할 수 있더라도 대상 파일이 불충분 한 경우 결과는 여전히 읽을 수 없습니다.

 <span><span><span class="hljs-comment">// 가정 link.txt 의미가 있습니다 secret.txt 기호 링크</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-string">'link.txt'</span></span><span>)); </span><span><span class="hljs-comment">// 에 따라 secret.txt 권한</span></span><span>
</span></span>

참고 : 기호 링크를 처리 할 때는 예상치 못한 액세스 실패를 피하기 위해 대상 파일 권한을 명확히하는 것이 가장 좋습니다.


4. 권한은 운영 체제마다 다릅니다

Windows Systems에서 iS_Readable ()은 주로 파일 속성을 기반으로 확인되며 UNIX/Linux 시스템에서는 사용자 권한 (UID/GID) 및 파일 권한 비트를 기반으로 판단합니다. 경우에 따라 동일한 코드가 다른 플랫폼에서 다른 결과를 반환 할 수 있습니다.


5. 파일 잠금 또는 점유

is_readable () 파일 시스템 권한 만 확인하고 파일이 다른 프로세스에 의해 잠겨 있는지 여부를 고려하지 않습니다. 파일이 점유 된 경우 (예를 들어 다른 프로그램에서만 작성된 경우) IS_READable ()는 여전히 TRUE를 반환 할 수 있지만 실제 읽기 작업이 실패 할 수 있습니다.


6. ACL (액세스 제어 목록) 또는 SELINUX 제한

고급 보안 메커니즘을 사용하는 시스템에서는 파일 권한이 ACL 또는 Selinux에 의해 제한 될 수 있지만 IS_Readable ()은 여전히 ​​true를 반환 할 수 있지만 파일을 읽으려고 시도하면 거부됩니다.