가장 일반적인 이유 중 하나는 파일 경로 오류입니다. hash_hmac_file ()을 호출 할 때 파일 경로는 정확해야합니다. PHP는 실행할 때 현재 작업 디렉토리를 기반으로 파일 경로를 구문 분석합니다. 따라서 들어오는 경로가 올바르지 않거나 현재 스크립트와 관련된 상대 경로가 잘못된 경우 "파일 찾기 없음"오류로 이어집니다.
파일의 절대 경로가 올바른지 확인하십시오. 상대 경로를 사용하는 경우 PHP 스크립트가 현재 위치한 디렉토리와 관련하여 올바른 경로인지 확인하십시오.
realpath () 함수를 사용하여 파일의 절대 경로를 가져와 경로가 올바르게 구문 분석되도록하십시오.
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'path/to/your/file.txt'</span></span><span>;
</span><span><span class="hljs-variable">$absolute_path</span></span><span> = </span><span><span class="hljs-title function_ invoke__">realpath</span></span><span>(</span><span><span class="hljs-variable">$file_path</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$absolute_path</span></span><span> === </span><span><span class="hljs-literal">false</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-variable">$absolute_path</span></span><span>;
}
</span></span>
파일 경로가 올바른 경우에도 PHP 프로세스는 파일에 액세스하기에 충분한 권한이 있어야합니다. 파일의 권한이 올바르게 설정되지 않으면 PHP가 파일 내용을 읽지 않아 "파일 찾기 없음"오류를 초래할 수 있습니다.
파일에 PHP 사용자에게 읽을 수있는 권한이 있는지 확인합니다.
PHP 사용자가 파일을 읽을 수 있도록 chmod 명령을 사용하여 파일의 권한을 수정하십시오.
<span><span><span class="hljs-built_in">chmod</span></span><span> 644 path/to/your/file.txt
</span></span>
PHP가 웹 서버 사용자로 실행중인 경우 사용자가 파일에 대한 권한을 읽었는지 확인하십시오. 일반적으로 웹 서버 사용자는 www-data 또는 apache 이며 다음 명령을 통해 현재 파일의 권한을 볼 수 있습니다.
<span><span><span class="hljs-built_in">ls</span></span><span> -l path/to/your/file.txt
</span></span>
PHP의 구성 파일 php.ini 에 파일 액세스 경로에 제한이있을 수 있습니다. 예를 들어, Open_Basedir 지시문은 PHP가 액세스 할 수있는 파일 경로를 제한합니다. Open_basedir가 제한되면 PHP는 제한 외에는 파일에 액세스 할 수 없습니다.
php.ini 파일에 Open_basedir 설정이 존재하는지 확인하십시오.
제한이있는 경우 php.ini 파일을 수정하거나 액세스 할 디렉토리 경로를 늘리거나 Open_Basedir 한도를 비활성화하십시오.
<span><span><span class="hljs-attr">open_basedir</span></span><span> = /var/www:/tmp:/usr/share/php:/path/to/your/files
</span></span>
수정이 완료되면 웹 서버 또는 PHP-FPM 서비스를 다시 시작하십시오.
hash_hmac_file ()을 실행하기 전에 먼저 파일이 존재하는지 확인하십시오. 파일이 존재하지 않으면 PHP는 "파일 찾기"오류를 반환합니다.
hash_hmac_file ()을 호출하기 전에 file_exists () 함수를 사용하여 파일이 존재하는지 확인하십시오.
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'path/to/your/file.txt'</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_path</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>
파일이 존재하지 않으면 파일 경로가 올바른지 또는 파일의 삭제, 이동 또는 이름이 변경되었는지 확인해야합니다.
파일 이름에 특수 문자 또는 비 ASCII 문자가 포함 된 경우 PHP는 일부 환경에서 파일 경로를 올바르게 식별하지 않아 파일을 찾을 수 없습니다.
파일 경로에 불법 문자가 없는지 확인하십시오. 특수 문자 또는 비 ASCII 문자가있는 경우 mb_convert_encoding () 또는 utf8_encode () 와 같은 함수를 사용하여 파일 경로의 인코딩을 변환 할 수 있습니다.
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'길/포함하다/특수 문자.txt'</span></span><span>;
</span><span><span class="hljs-variable">$encoded_path</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$file_path</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'GB2312'</span></span><span>);
</span></span>
파일이 고정 된 위치에 있다고 판단하면 가장 안전한 일은 상대 경로 대신 절대 경로를 사용하는 것입니다. PHP의 다른 작업 디렉토리로 인해 경로 해상도 오류를 피할 수 있습니다.
__dir__ 상수를 사용하여 현재 파일의 절대 경로를 얻고 상대 경로를 결합하여 정확성을 보장하십시오.
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/path/to/your/file.txt'</span></span><span>;
</span></span>