현재 위치: > 최신 기사 목록> md5_file ()가 false를 반환하는 이유는 무엇입니까?

md5_file ()가 false를 반환하는 이유는 무엇입니까?

M66 2025-06-03

PHP에서 MD5_FILE ()은 파일의 MD5 해시 값을 계산하는 매우 실용적인 기능입니다. 기본 구문은 다음과 같습니다.

 md5_file(string $filename, bool $binary = false): string|false

이 함수는 파일 경로를 인수로 가져 와서 파일의 MD5 체크섬을 반환합니다 (기본값은 16 진 형식의 문자열입니다). 그러나 많은 개발자들이 md5_file ()을 사용할 때 False가 반환되는 상황을 만나게됩니다. 이는 종종 일부 오류가 발생했음을 의미합니다. 이 기사는 여러 관점에서 이러한 상황을 유발할 수있는 이유를 분석합니다.

1. 파일 경로 오류

이것이 가장 일반적인 이유 중 하나입니다. 제공된 파일 경로가 오타, 잘못된 경로 형식 또는 존재하지 않는 디렉토리에 관계없이 부정확 한 경우 md5_file ()은 실패하고 false를 반환합니다.

예:

 $hash = md5_file('/path/to/nonexistent/file.txt');

여기에서 file.txt가 존재하지 않거나 경로가 잘못된 철자가 있으면 False가 반환됩니다.

2. 파일 권한이 부족합니다

파일 경로가 올바른 경우에도 MD5_FILE ()가 RUNGINE (일반적으로 WWW-DATA 와 같은 웹 서버 사용자)가 대상 파일을 읽을 수있는 권한이없는 경우 MD5_FILE ()가 False를 반환합니다.

해결책:

PHP에 파일 권한을 변경하여 파일을 읽을 수있는 충분한 권한이 있는지 확인하거나 속한 사용자를 변경할 수 있습니다.

 chmod 644 /path/to/file.txt
chown www-data:www-data /path/to/file.txt

3. 파일은 다른 프로세스에 의해 잠겨 있습니다

일부 운영 체제 및 파일 시스템은 다른 프로그램이 다른 프로그램에서 작성하거나 잠겨있을 때 다른 프로그램을 읽지 않도록 제한합니다. 이 경우 md5_file () 가 파일을 읽으려고하면 False를 반환 할 수도 있습니다.

예:

예를 들어, FTP에 의해 업로드되거나 다른 스크립트에 작성된 파일은 PHP가 읽기 실패 문제에 직면 할 수 있습니다.

4. URL은 로컬 경로 대신 사용됩니다.

php의 md5_file ()는 이론적으로 allow_url_fopen 설정을 통해 활성화 된 후 URL을 매개 변수로 사용하여 지원합니다. 그러나 실제로이 방법은 오류가 발생하기 쉬운 경우, 특히 원격 서버가 오류 상태 코드를 반환하거나 컨텐츠가 크고 느리면 오류가 발생합니다.

예:

 $hash = md5_file('https://m66.net/uploads/example.zip');

이 코드는 allow_url_fopen이 켜져 있는 경우에만 성공적으로 실행할 수 있습니다. 그렇지 않으면 거짓이 반환됩니다.

다음 방법을 사용하여 코드의 구성을 확인할 수 있습니다.

 if (!ini_get('allow_url_fopen')) {
    echo "원격 파일 액세스 기능이 활성화되지 않았습니다";
}

제안 : 원격 URL에 의존하지 마십시오. 먼저 file_get_contents ()를 통해 로컬 임시 파일을 다운로드 한 다음 md5_file ()을 사용하는 것이 더 안전합니다.

5. 파일이 비어 있거나 손상되었습니다

md5_file () 이 빈 파일을 처리 할 수 ​​있지만 때로는 파일이 잘림 또는 손상된 경우 (특히 이진 파일) 읽기 예외를 유발할 수 있습니다. 이것은 일반적이지 않지만 filesize () 또는 fopen () + fread () 에 의해 파일 상태를 수동으로 감지 할 수 있습니다.

6. 경로에는 특수 문자 또는 일관성이없는 인코딩이 포함됩니다

파일 경로에 NONTF-8 문자 (특히 Windows 시스템에서)가 포함되어 있거나 사용자가 업로드 할 때 (중국어, 공백 또는 특수 기호)가 업로드 할 때 경로가 구성되면 경로가 잘못 구문 분석 될 수 있습니다.

예:

 $hash = md5_file('/var/www/uploads/문서A.txt'); // 경로 인코딩은 일관성이 없을 수 있습니다

RealPath ()를 사용하여 그러한 문제를 우회하는 것은 좋은 방법입니다.

 $path = realpath('/var/www/uploads/문서A.txt');
$hash = md5_file($path);

7. 임시 파일이 삭제되거나 이동되었습니다

move_uploaded_file () , tmpfile () 또는 일부 자동 생성 된 임시 경로 파일을 사용하면이 파일이 작동 중에 수명을 삭제, 이동 또는 초과하여 읽으려고 할 때 MD5_File ()가 실패 할 수 있습니다.