PHP의 is_file 또는 file_exists


117

지정된 위치 ($ path. $ file_name)의 HDD에 파일이 있는지 확인해야합니다.

is_file()file_exists()함수 의 차이점은 무엇이며 PHP에서 사용하는 것이 더 좋고 / 빠릅니다.

답변:


167

is_file()false주어진 경로가 디렉토리를 가리키는 경우 반환 됩니다. 주어진 경로가 유효한 파일 이나 디렉토리를 가리키는 경우 file_exists()반환 true됩니다 . 따라서 그것은 전적으로 귀하의 필요에 달려 있습니다. 파일인지 여부를 구체적 으로 알고 싶다면 . 그렇지 않으면 .is_file()file_exists()


1
내가 아는 한 if_file은 디렉토리뿐만 아니라 기호 링크에서도 실패합니다.
stefs

is_file ()은 파일이 디렉토리에 존재하면 true를 반환하고, 2020 년에 체크인 할 때 파일이 존재하지 않으면 false를 반환합니다. 이것은 PHP 버전 업데이트 일 수 있습니다
heySushil

37

is_file()가장 빠르지 만 최근 벤치 마크에 따르면 file_exists()약간 더 빠릅니다. 그래서 나는 그것이 서버에 달려 있다고 생각합니다.

내 테스트 벤치 마크 :

benchmark('is_file');
benchmark('file_exists');
benchmark('is_readable');

function benchmark($funcName) {
    $numCycles = 10000;
    $time_start = microtime(true);
    for ($i = 0; $i < $numCycles; $i++) {
        clearstatcache();
        $funcName('path/to/file.php'); // or 'path/to/file.php' instead of __FILE__
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo "$funcName x $numCycles $time seconds <br>\n";
}

편집 : @Tivie 코멘트에 감사드립니다. 사이클 수를 1000에서 10k로 변경했습니다. 결과는 다음과 같습니다.

  1. 파일 이있는 경우 :

    is_file x 10000 1.5651218891144 초

    file_exists x 10000 1.5016479492188 초

    is_Readable x 10000 3.7882499694824 초

  2. 파일 이없는 경우 :

    is_file x 10000 0.23920488357544 초

    file_exists x 10000 0.22103786468506 초

    is_Readable x 10000 0.21929788589478 초

편집 : 이동 clearstatcache (); 루프 내부. 감사합니다 CJ Dennis.


7
이 벤치 마크가 작동하려면 clearstatcache (); is_file 및 file_exists에 대한 결과가 스크립트 전체에 캐시되기 때문입니다. 어쨌든 file_exists ()는 약간 느리지 만 약 100K 파일 검사를 수행하지 않는 한 아무런 차이가 없어야합니다. php.net/manual/en/function.clearstatcache.php
Tivie

1
나도 is_file()보다 빨리 찾았 습니다 file_exists(). 파일 (디렉토리가 아님)이라는 것을 알고 있다면 반드시 대신 사용하십시오.
Jonathan

1
이상하게도 이제 'file_exists'가 'is_file'보다 빠릅니다.
weynhamz

7
이 두 함수가 다른 동작을 가지고 있기 때문에 사람들이 관심을 갖는 이유는 무엇입니까? (허용 된 답변에서 언급했듯이 하나는 파일 또는 파일을 가리키는 심볼릭 링크인지 테스트합니다 (그러나 디렉토리가 아닌 심볼릭 링크는 (디렉토리를
가리킴

2
@Brandin 사람들은 많은 상황 에서 파일이나 디렉토리를 확인하고 있는지 이미 알고 있으므로 그것이 존재하는지 여부가 유일한 중요하기 때문에 관심이 있습니다. 그렇다면 is_dir()턴 아웃하는 것이보다 빠른 20 %로 file_exists()만 어쨌든 DIRS 확인하는 경우 (그렇지, BTW 않음), 그 ... 중요한 차이가 될 수 있습니다
Byson

2

둘 다 아닙니다.

is_file ()은 파일이 존재하지 않으면 true를 반환 할 수 있습니다.

file_exists ()는 파일이 디렉토리이면 true를 반환 할 수 있습니다.

따라서 파일이어야하고 존재해야한다면 둘 다 필요합니다.

속도는 동일하지 않기 때문에 여기서는 중요하지 않습니다. 하나의 기능 만 중요하고 더 빠를 경우 하나만 사용하십시오.


1

이 게시물이 오래되었다는 것을 알고 있지만이 기능의 차이점은 행동 뿐만이 아닙니다. is_file ()을 사용하여 큰 파일의 유무를 확인하면 2 개 이상의 Go. 당신은 놀랄 것입니다. 파일이 없습니다. :(하지만 file_exists ()로 확인하면 작동합니다.


0

is_file백 슬래시와 함께 사용하면 더 빠를 것입니다 : \is_file. 이 경우 PHP는 opcache 최적화도 제공 file_exists하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.