현재 위치: > 최신 기사 목록> 디렉토리 권한 검사를 전달할 수없는 IS_Readable 함수를 만나면 어떻게 해결해야합니까?

디렉토리 권한 검사를 전달할 수없는 IS_Readable 함수를 만나면 어떻게 해결해야합니까?

gitbox 2025-09-12

디렉토리 권한 검사를 전달할 수없는 IS_Readable 함수를 만나면 어떻게 해결해야합니까?

PHP 개발에서 IS_Readable 함수는 종종 파일 또는 디렉토리를 읽을 수 있는지 여부를 감지하는 데 사용됩니다. 이 함수는 부울 값을 반환하고, 진정한 수단을 읽을 수 있으며, 허위는 읽을 수 없게됩니다. IS_Readable을 사용할 때 디렉토리 권한 검사를 전달할 수없는 경우 일반적으로 파일 또는 디렉토리 권한 설정에 문제가 있거나 프로그램 자체의 경로 및 권한이 부적절하게 처리된다는 것을 의미합니다.

이 기사는 가능한 원인을 자세히 분석 하고이 상황에 대한 해당 솔루션을 제공합니다.

1. is_readable 함수의 기본 사용

먼저 iS_Readable 함수의 기본 사용법을 검토해 봅시다.

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'path/to/file_or_directory'</span></span><span>;
</span><span><span class="hljs-keyword">if</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-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>

IS_Readable은 경로에 의해 가리키고 파일 또는 디렉토리가 존재하고 읽기 권한이있는 경우 true를 반환합니다. False가 반환되면 파일 또는 디렉토리를 읽을 수 없습니다.

2. 디렉토리 권한 문제

대부분의 경우 is_readable 이 디렉토리를 확인하면 디렉토리에 올바른 읽기 권한이없는 경우 함수가 False를 반환합니다. 따라서 먼저 디렉토리의 권한 설정을 확인해야합니다.

해결책:

  1. 디렉토리 권한 확인 : LS -L 명령 (Linux 또는 Mac 시스템)을 사용하여 디렉토리의 권한 설정을 확인하십시오. 디렉토리에 읽기 권한이 있는지 확인하십시오 (최소 R- 권한).

     <span><span><span class="hljs-built_in">ls</span></span><span> -ld /path/to/directory
    </span></span>
  2. 디렉토리 권한 변경 : 디렉토리에 올바른 권한이없는 경우 CHMOD 명령을 사용하여 권한을 수정할 수 있습니다. 예를 들어 디렉토리에 읽기 권한을 추가하십시오.

     <span><span><span class="hljs-built_in">chmod</span></span><span> +r /path/to/directory
    </span></span>
  3. 부모 디렉토리 권한 확인 : 대상 디렉토리의 상위 디렉토리에 읽기 권한이없는 경우 IS_ReadableFalse를 반환합니다. 따라서 부모 디렉토리에도 올바른 권한이 있음을 확인하십시오.

  4. 웹 서버 사용자 권한 확인 : PHP는 일반적으로 www-data (우분투 시스템)와 같은 웹 서버 사용자의 권한에 따라 실행됩니다. 이 사용자가 디렉토리에 액세스 할 수있는 권한이 있는지 확인하십시오.

3. 디렉토리 문제

때때로, IS_Readable은 권한 문제로 인해뿐만 아니라 디렉토리 나 파일이 전혀 존재하지 않기 때문에 False를 반환합니다. 먼저 file_exists 함수를 사용하여 대상 경로가 있는지 확인할 수 있습니다.

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'path/to/file_or_directory'</span></span><span>;
</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>)) {
    </span><span><span class="hljs-keyword">if</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-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><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>

4. 경로가 올바른지 확인하십시오

is_readable을 사용하는 경우 경로의 정확성이 중요합니다. 경로에 오류가 포함되어 있거나 상대 경로가 사용되는 경우 파일 또는 디렉토리의 가독성을 올바르게 결정할 수 없습니다.

해결책:

  • 절대 경로 사용 : 특히 복잡한 디렉토리 구조에서 상대 경로를 사용하지 마십시오. 절대 경로를 사용하면 경로 오류가 줄어들 수 있습니다.

     <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'DOCUMENT_ROOT'</span></span><span>] . </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
    </span></span>
  • 디버그 경로 문제 : Echo 또는 Var_dump를 사용하여 경로를 인쇄하여 경로가 올바른지 확인할 수 있습니다.

     <span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">realpath</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>));
    </span></span>

5. Selinux 또는 Apparmor와 같은 보안 모듈

일부 Linux 시스템에서는 Selinux 또는 Apparmor와 같은 보안 모듈이 PHP 프로세스를 통해 특정 파일 및 디렉토리에 대한 액세스를 제한 할 수 있지만 이러한 디렉토리의 파일 권한이 올바른 것으로 보입니다. 이러한 모듈은 PHP 스크립트가 특정 작업을 수행하는 것을 방해 할 수있어 IS_ReadableFalse를 반환 할 수 있습니다.

해결책:

  • Selinux 또는 AppArmor 로그를 확인하십시오. 관련 로그 파일을 확인하고 이러한 보안 모듈이 파일이 읽지 못하게하는지 확인하십시오.

  • 보안 정책 조정 : PHP 스크립트가 관련 디렉토리에 액세스 할 수 있도록 필요에 따라 Selinux 또는 AppArmor 보안 정책을 조정하십시오.

6. 파일 시스템 마운트 문제

파일 시스템 또는 디렉토리가 NFS 및 SMB와 같은 네트워크 파일 시스템을 통해 장착 된 경우 파일의 권한은 네트워크 파일 시스템 설정의 영향을받을 수 있습니다. IS_Readable 함수는 이러한 파일 시스템의 디렉토리 권한을 올바르게 감지하지 못할 수 있습니다.

해결책:

  1. 마운트 옵션 확인 : 파일 시스템의 마운트 옵션이 PHP 프로세스가 관련 디렉토리에 액세스 할 수 있도록 허용하십시오. 예를 들어, NFS가 장착되면 NO_ROOT_SQUASH 옵션이 활성화되지 않은지 확인하십시오.

  2. 로컬 파일 시스템 사용 : 네트워크 파일 시스템에 중요한 PHP 스크립트 및 파일을 배치하지 말고 로컬 파일 시스템을 사용해보십시오.

7. PHP의 Open_basedir 제한

일부 PHP 구성 환경에서는 Open_Basedir 제한이 PHP 스크립트의 파일 액세스 기능에 영향을 줄 수 있습니다. PHP의 구성 파일 (예 : php.ini )에서 Open_basedir가 활성화되면 PHP 스크립트는 지정된 디렉토리에서 파일에만 액세스 할 수 있으므로 IS_Readable이 특정 디렉토리를 올바르게 감지하지 못할 수 있습니다.

해결책:

  1. Open_Basedir 설정을 확인하십시오. php.ini 파일의 Open_Basedir 구성 항목을 확인하여 설정에 액세스 해야하는 디렉토리 경로가 있는지 확인하십시오.

  2. Open_BASEDIR 조정 : 필요한 경우 Open_Basedir 설정을 조정하거나 PHP 스크립트에서 INI_SET () 함수를 통해이 설정을 일시적으로 조정하십시오.

 <span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'open_basedir'</span></span><span>, </span><span><span class="hljs-string">'/path/to/your/directory'</span></span><span>);
</span></span>

요약

is_readable 이 디렉토리 권한 확인을 통과 할 수없는 경우 일반적으로 여러 측면에서 시작하여 문제 해결을해야합니다. 먼저 디렉토리가 존재하고 올바른 권한이 있는지 확인하십시오. 둘째, PHP 스크립트의 실행중인 환경을 확인하여 Open_basedir 및 Selinux와 같은 보안 제한이 있는지 확인하십시오. 포괄적 인 디버깅을 통해 문제를 더 빨리 찾아서 해결할 수 있습니다.