현재 위치: > 최신 기사 목록> hash_hmac_file ()을 사용할 때 어떻게해야합니까? 일반적인 오류 및 솔루션

hash_hmac_file ()을 사용할 때 어떻게해야합니까? 일반적인 오류 및 솔루션

gitbox 2025-09-08

1. 파일 권한이 부족하여 함수가 파일을 읽지 않게합니다.

해시 값을 계산하려면 지정된 파일의 내용을 읽어야합니다. 파일에 읽기 권한이 충분하지 않은 경우 PHP는 오류를 반환하거나 올바르게 실행되지 않습니다.

오류 프롬프트 예 :

 <span><span><span class="hljs-built_in">Warning</span></span><span>: hash_hmac_file() [</span><span><span class="hljs-keyword">function</span></span><span>.hash-hmac-file]: open_basedir restriction </span><span><span class="hljs-keyword">in</span></span><span> effect. File(/</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/file) </span><span><span class="hljs-keyword">is</span></span><span> </span><span><span class="hljs-keyword">not</span></span><span> </span><span><span class="hljs-keyword">within</span></span><span> the allowed path(s)
</span></span>

해결책:

  • 파일 읽기 권한이 올바르게 설정되어 있는지 확인하십시오. 다음 명령을 따르면 파일 권한을 확인할 수 있습니다.

     <span><span><span class="hljs-built_in">ls</span></span><span> -l /path/to/file
    </span></span>

    파일에 읽기 권한이없는 경우 chmod 명령을 통해 파일 권한을 수정할 수 있습니다.

     <span><span><span class="hljs-built_in">chmod</span></span><span> 644 /path/to/file
    </span></span>
  • 또한 공유 호스팅 또는 Open_Basedir 제한을 사용하는 환경에서 코드를 실행하는 경우 파일 경로가 허용 된 디렉토리 범위 내에 있는지 확인하십시오. 이 설정은 php.ini를 수정하거나 시스템 관리자에게 연락하여 조정할 수 있습니다.


2. Open_BASEDIR 제한은 파일 액세스를 초래합니다

Open_basedir 는 PHP의 보안 메커니즘으로 스크립트가 액세스 할 수있는 파일 경로를 제한합니다. 파일이 Open_Basedir 한계 외부에 있으면 hash_hmac_file ()은 파일에 액세스 할 수 없으므로 오류가 발생합니다.

오류 프롬프트 예 :

 <span><span><span class="hljs-built_in">Warning</span></span><span>: hash_hmac_file() [</span><span><span class="hljs-keyword">function</span></span><span>.hash-hmac-file]: open_basedir restriction </span><span><span class="hljs-keyword">in</span></span><span> effect. File(/</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/file) </span><span><span class="hljs-keyword">is</span></span><span> </span><span><span class="hljs-keyword">not</span></span><span> </span><span><span class="hljs-keyword">within</span></span><span> the allowed path(s)
</span></span>

해결책:

  • php.ini 에서 Open_basedir 설정을 확인하여 액세스 할 파일의 경로가 허용 된 디렉토리 내에 있는지 확인하십시오.

  • 공유 호스팅 환경이고 php.ini를 수정할 수없는 경우, 액세스 할 수있는 디렉토리로 파일을 이동하거나 호스트 서비스 제공 업체에 문의하여 Open_basedir 설정을 조정하려고 시도 할 수 있습니다.


3. 잘못된 파일 경로

파일 경로 오류는 hash_hmac_file ()가 제대로 작동하지 않는 일반적인 이유 중 하나입니다. 경로 오류는 상대 또는 절대 경로의 부적절한 구성으로 인해 발생할 수 있습니다.

오류 프롬프트 예 :

 <span><span><span class="hljs-built_in">Warning</span></span><span>: hash_hmac_file(/invalid/</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/file): failed </span><span><span class="hljs-keyword">to</span></span><span> </span><span><span class="hljs-keyword">open</span></span><span> stream: </span><span><span class="hljs-keyword">No</span></span><span> such file </span><span><span class="hljs-keyword">or</span></span><span> directory
</span></span>

해결책:

  • Hash_hmac_file () 로 전달 된 경로가 정확한지 확인하십시오. 상대 경로를 사용하는 경우 현재 작업 디렉토리 ( getCWD () )가 파일의 실제 저장 위치와 일치하는지 확인하십시오.

  • 경로 문제를 피하기 위해 절대 경로를 사용해보십시오. 예를 들어:

     <span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'/var/www/html/uploads/myfile.txt'</span></span><span>;
    </span><span><span class="hljs-variable">$secret_key</span></span><span> = </span><span><span class="hljs-string">'your-secret-key'</span></span><span>;
    </span><span><span class="hljs-variable">$hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hash_hmac_file</span></span><span>(</span><span><span class="hljs-string">'sha256'</span></span><span>, </span><span><span class="hljs-variable">$file_path</span></span><span>, </span><span><span class="hljs-variable">$secret_key</span></span><span>);
    </span></span>

4. 파일이 존재하는지 확인하십시오

hash_hmac_file ()을 호출하기 전에 파일이 존재하는지 확인하는 것이 가장 좋습니다. 파일이 존재하지 않으면 hash_hmac_file ()을 호출하면 직접 오류가 발생합니다.

해결책:

  • File_Exists () 함수를 사용하여 파일이 존재하는지 확인하십시오.

     <span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'/path/to/file'</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-variable">$hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hash_hmac_file</span></span><span>(</span><span><span class="hljs-string">'sha256'</span></span><span>, </span><span><span class="hljs-variable">$file_path</span></span><span>, </span><span><span class="hljs-variable">$secret_key</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">"File does not exist!"</span></span><span>;
    }
    </span></span>

5. PHP 프로세스에 충분한 권한이 있는지 확인하십시오

파일 자체의 권한 외에도 PHP 스크립트 (예 : www-data )를 실행하는 사용자는 파일에 대한 충분한 읽기 권한이 있어야합니다. PHP 프로세스에 파일을 읽을 권한이없는 경우 Hash_hmac_file () 도 실패합니다.

해결책:

  • PHP 프로세스 사용자가 파일에 대한 권한을 읽은지 확인하십시오. 다음 명령을 사용하여 PHP 프로세스 사용자를 확인할 수 있습니다.

     <span><span>ps aux | grep php
    </span></span>
  • PHP 프로세스에 권한이없는 경우 Chown 명령을 사용하여 파일의 소유자를 PHP 프로세스 사용자로 변경하십시오.

     <span><span>sudo </span><span><span class="hljs-built_in">chown</span></span><span> www-data:www-data /path/to/file
    </span></span>

6. 디버깅 hash_hmac_file () 로 반환 된 오류

알 수없는 오류가 발생하면 PHP 오류보고를 활성화하여 문제를 디버깅 할 수 있습니다. 스크립트 상단에 다음 코드를 추가하면 오류 메시지를 캡처하고 표시하는 데 도움이 될 수 있습니다.

 <span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'display_errors'</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">error_reporting</span></span><span>(E_ALL);
</span></span>

오류보고를 활성화 한 후 PHP는 세부 오류 정보를 표시하여 문제를 신속하게 찾을 수 있도록 도와줍니다.