PHP에서 MD5_File 함수는 지정된 파일의 MD5 해시 값을 계산하는 데 사용되며, 이는 종종 파일 무결성 확인에 사용됩니다. 그러나 때로는 파일 경로가 정상으로 보이더라도 MD5_File은 여전히 제대로 작동하지 않아 False 또는 Empty 값을 반환합니다. 이 상황은 혼란 스러울 수 있습니다. 이 기사는 문제를 찾고 해결하는 데 도움이되는 자세한 조사 아이디어를 소개합니다.
경로는 정상이라고 생각하지만 다음 방법을 사용하여 확인하는 것이 좋습니다.
<?php
$file = '/path/to/your/file.txt';
if (file_exists($file)) {
echo "파일이 존재합니다";
} else {
echo "파일이 존재하지 않습니다";
}
?>
file_exists가 false를 반환하면 경로 문제가 여전히 존재 함을 의미합니다. 알아채다:
경로는 절대입니까? 올바른 작업 디렉토리를 기준으로 상대 경로입니까?
경로에는 중국어 또는 특수 문자가있어 경로가 실패를 해결할 수 있습니까?
realpath () 함수를 사용하여 경로의 실제 위치를 확인하십시오.
<?php
echo realpath('/path/to/your/file.txt');
?>
파일이 존재하더라도 PHP 실행 사용자에게 읽기 권한이없는 경우 MD5_File이 실패합니다. 권한 점검 :
Linux에서는 LS -L을 사용하여 파일 권한을보고 PHP 사용자 (예 : www -data)가 읽기 권한이 있음을 확인하십시오.
PHP에서 파일을 읽을 수 있는지 테스트하십시오.
<?php
$file = '/path/to/your/file.txt';
$content = @file_get_contents($file);
if ($content === false) {
echo "파일을 읽을 수 없습니다,권한을 확인하십시오";
} else {
echo "파일을 읽을 수 있습니다";
}
?>
일부 PHP 구성은 파일 액세스를 제한 할 수 있습니다.
Open_basedir 제한 : 활성화 된 경우 PHP는 지정된 디렉토리에만 액세스 할 수 있으며 범위를 벗어난 경우 실패합니다. phpinfo ()를 사용하여 Open_basedir 설정을 볼 수 있습니다.
Safe_Mode (이전 PHP 버전) : 파일 액세스를 제한합니다.
파일 경로가 허용 범위 내에 있는지 확인하십시오.
드문 경우, 파일이 다른 프로세스에 의해 잠겨 있거나 작성되는 경우, 읽기 실패를 유발할 수 있습니다. 점유 과정을 닫거나 나중에 다시 시도 할 수 있습니다.
극단적이거나 특수 형식 파일은 드문 일이지만 MD5_File을 실패시킬 수 있습니다. 먼저 다른 작은 파일에서 테스트를 실행해보십시오.
<?php
echo md5_file('/path/to/smallfile.txt');
?>
작은 파일이 정상이면 파일 자체에 문제가있을 수 있습니다.
관련 오류 프롬프트가 있는지 확인하려면 오류 보고서를 켜십시오.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$file = '/path/to/your/file.txt';
$result = md5_file($file);
if ($result === false) {
echo "계산이 실패했습니다,파일에 액세스 할 수 없을 수 있습니다";
} else {
echo "MD5: $result";
}
?>
MD5_File이 항상 작동하지 않으면 파일 내용을 수동으로 읽고 MD5 계산을 사용하여 성공했는지 확인할 수 있습니다.
<?php
$file = '/path/to/your/file.txt';
$content = @file_get_contents($file);
if ($content === false) {
echo "읽지 못했습니다";
} else {
echo md5($content);
}
?>
이것이 성공하면 MD5_File 이 파일을 읽는 데 문제가 있음을 의미합니다.이 파일은 기본 IO 또는 권한으로 인한 것일 수 있습니다.
<?php
$file = '/path/to/your/file.txt';
if (!file_exists($file)) {
die("파일이 존재하지 않습니다");
}
if (!is_readable($file)) {
die("파일을 읽을 수 없습니다");
}
$md5 = md5_file($file);
if ($md5 === false) {
die("md5_file 계산이 실패했습니다");
}
echo "문서 $file ~의 MD5 가치는입니다:$md5";
?>
MD5_File은 URL을 통해 원격 파일에 대한 액세스를 지원하지만 allow_url_fopen 의 구성에 따라 다릅니다. 다음과 같은 것을 사용하는 경우
<?php
echo md5_file('http://m66.net/path/to/file');
?>
보장해야합니다.
php 구성에서는 allow_url_fopen이 활성화되어 있습니다.
원격 서버는 정상적으로 응답합니다.
네트워크 연결은 정상입니다.
그렇지 않으면 실패를 반환합니다.