현재 위치: > 최신 기사 목록> 업로드 된 디렉토리를 확인하기 위해 IS_DIR () 함수를 사용하는 경우 디렉토리 권한 및 경로 설정이 올바른지 확인하는 방법은 무엇입니까?

업로드 된 디렉토리를 확인하기 위해 IS_DIR () 함수를 사용하는 경우 디렉토리 권한 및 경로 설정이 올바른지 확인하는 방법은 무엇입니까?

M66 2025-06-22

PHP를 사용하여 파일 업로드 기능을 구축 할 때는 일반적으로 업로드 대상 디렉토리가 존재하는지 확인해야합니다. is_dir () 는이 점검을 수행하는 일반적인 기능입니다. 그러나 많은 개발자들은 is_dir ()를 사용할 때 약간의 의심을 나타냅니다. 디렉토리는 명확하게 존재하지만 함수는 False를 반환합니다. 또는 업로드가 실패하여 디렉토리에 권한이 없음을 알려줍니다. 이 기사는 IS_DIR ()를 사용하여 업로드 된 디렉토리를 확인할 때 디렉토리 권한을 확인하는 방법을 여러 관점에서 분석합니다.

1. IS_DIR () 함수 소개

is_dir () 는 PHP가 제공하는 내장 함수이며, 주어진 파일 경로가 디렉토리인지 여부를 결정하는 데 사용됩니다. 기본 구문은 다음과 같습니다.

 bool is_dir(string $filename)

반환 값은 부울 입니다. $ filename 이 존재하면 디렉토리 인 경우. 그렇지 않으면, 거짓 .

2. 경로를 설정하는 올바른 방법

1. 상대 경로 대신 절대 경로를 사용하십시오

많은 초보자는 종종 상대 경로를 사용하여 다음과 같은 디렉토리를 확인합니다.

 if (is_dir('uploads/')) {
    // ...
}

이것은 경우에 따라 가능하지만 현재 스크립트 실행 경로에 취약합니다. 더 안전한 접근법은 __dir__ 또는 RealPath ()를 사용하여 절대 경로를 얻는 것입니다.

 $uploadDir = __DIR__ . '/uploads/';
if (is_dir($uploadDir)) {
    // 안전하고 신뢰할 수있는 디렉토리 검사
}

또는:

 $uploadDir = realpath(__DIR__ . '/uploads/');
if ($uploadDir !== false && is_dir($uploadDir)) {
    // 디렉토리가 존재합니다
}

경로가 부적절하게 접합되거나 불법 문자가 사용되거나 디렉토리 분리기 오류 (특히 Windows와 Linux 사이의 전환을 개발할 때)가 사용되는 경우 IS_DIR ()False를 반환합니다.

2. 길에서 중국어 또는 특수 인물을 피하십시오

일부 시스템에서는 경로에 중국어 또는 특수 문자가 있으면 경로 해상도가 실패 할 수 있습니다. 폴더의 이름으로 영어 문자와 밑줄을 사용하는 것이 좋습니다.

3. 디렉토리 권한을 확인하십시오

IS_DIR ()은 디렉토리가 존재하는지 확인할 수 있으며 읽기 및 쓰기 권한이 있는지 확인할 수 없습니다. 파일을 업로드 할 때는 다음을 확인해야합니다.

  • 디렉토리가 존재합니다 ( is_dir ()는 true를 반환합니다)

  • PHP 프로세스에는이 디렉토리에 대한 쓰기 권한이 있습니다 ( is_writable () )

 $uploadDir = __DIR__ . '/uploads/';
if (!is_dir($uploadDir)) {
    die('디렉토리가 존재하지 않습니다');
}
if (!is_writable($uploadDir)) {
    die('디렉토리가 작성되지 않았습니다,권한 설정을 확인하십시오');
}

Linux 시스템에서는 다음 명령을 사용하여 권한을 수정할 수 있습니다.

 chmod 755 uploads/
chown www-data:www-data uploads/

그중 www-data는 PHP 프로세스가 속한 사용자 (예 : Apache/Nginx의 PHP-FPM 사용자)가 서버 환경에 따라 다릅니다.

4. PHP 스크립트의 실행 환경을 확인하십시오

다른 실행 환경 (명령 줄, Apache, Nginx), __dir__ 및 현재 작업 경로는 다를 수 있습니다. 다음 코드를 사용하여 경로 문제를 디버깅하는 데 도움이 될 수 있습니다.

 echo '현재 작업 디렉토리:' . getcwd() . PHP_EOL;
echo '현재 파일 경로:' . __FILE__ . PHP_EOL;
echo '디렉토리 절대 경로를 업로드하십시오:' . realpath(__DIR__ . '/uploads/') . PHP_EOL;

5. URL과 디렉토리의 관계에 대한 오해

일부 개발자는 업로드 경로를 확인할 때 "URL"과 "파일 경로"의 차이를 혼동합니다. 예를 들어 다음 글쓰기 방법이 잘못되었습니다.

 // 오류 예제:할 것이다 URL 길로 취급하십시오
$uploadDir = 'https://m66.net/uploads/';
if (is_dir($uploadDir)) {
    // 영원히 돌아옵니다 false
}

is_dir ()는 URL에 사용할 수 없으며 서버의 로컬 파일 시스템으로의 경로에만 사용할 수 있습니다. CDN 또는 원격 저장소를 사용하는 경우 API 또는 기타 방법을 통해 원격 디렉토리를 확인해야합니다.

올바른 방법은 예를 들어 서버 로컬 경로를 사용하는 것입니다.

 $uploadDir = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';

이지도 /업로드/ URL에서 /var/www/html/uploads/ 와 같은 실제 파일 시스템의 경로에 대한 경로.

6. 요약

IS_DIR ()을 사용하여 업로드 디렉토리가 존재하는지 여부를 확인하는 것이 안전한 업로드 파일의 첫 번째 단계이지만 전체 프로세스의 견고성을 보장하기 위해 경로 해상도 및 권한 점검과 협력해야합니다. 다음 사항을 기억하십시오.

  • 절대 경로를 사용하는 것이 상대 경로보다 낫습니다

  • is_dir ()is_writable ()가 동시에 만족하는 확인

  • is_dir () 로 파일 경로로 URL을 전달하지 마십시오.

  • __dir__ , realPath ()getCWD () 의 디버그 경로 문제를 도와주세요.

  • 업로드 디렉토리에 서버 쓰기 권한이 있는지 확인하십시오

이는 경로 나 권한으로 인한 업로드 실패를 효과적으로 피하고 업로드 기능의 안정성을 향상시킬 수 있습니다.