현재 위치: > 최신 기사 목록> FINFO_CLOSE 기능을 호출하는 것을 잊어 버려 어떤 성능 문제가 발생합니까? 이러한 오류를 피하는 방법은 무엇입니까?

FINFO_CLOSE 기능을 호출하는 것을 잊어 버려 어떤 성능 문제가 발생합니까? 이러한 오류를 피하는 방법은 무엇입니까?

gitbox 2025-09-18

1. finfo_close () 함수의 역할

파일 유형 감지에 FINFO를 사용하는 경우 PHP는 FINFO_OPEN () 을 통해 리소스 스트림을 열어 파일 정보와 관련된 내부 리소스를 관리하는 데 사용됩니다. finfo_open ()은 파일 핸들을 열기와 유사하게 작동하지만 Finfo_close ()는 이 리소스를 출시하고 해당 파일 핸들을 닫습니다. FINFO_CLOSE () 가 호출되지 않으면 PHP는 관련 리소스를 해제 할 수 없어 리소스 누출이 발생합니다.

2. Finfo_Close () 성능 영향을 호출하는 것을 잊었습니다

2.1 메모리 누출

PHP는 런타임 동안 열린 파일 정보 흐름을 처리하기 위해 특정 메모리 리소스를 할당해야합니다. Finfo_close () 호출을 잊어 버린 경우 이러한 리소스는 제 시간에 해제되지 않으므로 메모리가 지속적으로 점유됩니다. 특히 Finfo_open ()finfo_file () 과 같은 함수가 지속적으로 요청되므로 고부로드 애플리케이션에서는 지속적으로 요청되므로 리소스가 점차 축적되어 메모리 소진으로 이어질 수 있으며, 이는 서버의 성능에 영향을 미치고 응용 프로그램 충돌을 일으킬 수도 있습니다.

2.2 파일 핸들이 소진되었습니다

Finfo_open () 에 대한 각 호출은 파일 핸들을 소비합니다. Finfo_close ()가 핸들을 해제하도록 호출되지 않으면 PHP는 이러한 리소스를 재활용 할 수 없으므로 시스템에서 열린 파일 핸들 수가 점차 증가합니다. 파일 핸들은 유한 리소스입니다. 핸들이 너무 많지 않으면 파일 핸들이 필요한 다른 작업 (예 : 파일 열기, 데이터베이스 연결 등)이 실패하여 전체 시스템의 안정성에 영향을 줄 수 있습니다.

2.3은 동시성 성능에 영향을 미칩니다

다중 스레드 또는 고음성 시나리오에서는 Finfo_close () 에 전화하는 것을 잊어 버리면 시스템의 리소스 할당이 더욱 강해져 성능 저하가 발생할 수 있습니다. 다중 요청이 응용 프로그램에 동시에 액세스하면 리소스 누출로 인해 새로운 요청의 정상적인 처리가 방해하여 응답 속도가 느려지거나 시간 초과가 발생하여 사용자 경험에 영향을 미칩니다.

2.4 자원 경쟁

다수의 미탈 된 파일 정보가 자원을 차지하면 다른 운영에 필요한 리소스가 "잠금"또는 "소진"되어 리소스 경쟁이 발생할 수 있습니다. 이 경쟁으로 인해 다른 프로그램이나 스크립트가 원활하게 실행되지 않아 응용 프로그램의 전반적인 효율성이 줄어 듭니다.

3. 이러한 오류를 피하는 방법

finfo_close () 에 전화하는 것을 잊어 버려는 성능 문제를 피하기 위해 다음과 같은 조치를 취할 수 있습니다.

3.1 좋은 자원 관리 습관

가장 중요한 것은 FINFO 관련 기능을 매번 사용한 직후 Finfo_Close () 에게 전화하는 것입니다. 이것은 자원 누출을 피하는 가장 직접적이고 효과적인 방법입니다. 코드에서 다음 방법을 사용할 수 있습니다.

 <span><span><span class="hljs-variable">$finfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">finfo_open</span></span><span>(FILEINFO_MIME_TYPE); </span><span><span class="hljs-comment">// 열려 있는finfo의지</span></span><span>
</span><span><span class="hljs-variable">$mimeType</span></span><span> = </span><span><span class="hljs-title function_ invoke__">finfo_file</span></span><span>(</span><span><span class="hljs-variable">$finfo</span></span><span>, </span><span><span class="hljs-string">'example.txt'</span></span><span>); </span><span><span class="hljs-comment">// 파일을 얻으십시오MIME유형</span></span><span>
</span><span><span class="hljs-title function_ invoke__">finfo_close</span></span><span>(</span><span><span class="hljs-variable">$finfo</span></span><span>); </span><span><span class="hljs-comment">// 폐쇄finfo의지</span></span><span>
</span></span>

3.2 자원을 자동으로 출시하는 방법을 사용하십시오

경우에 따라 개발자는 PHP의 자동 쓰레기 수집 메커니즘을 활용하여 더 이상 사용하지 않을 때 객체의 자원이 재활용되도록 할 수 있습니다. 예를 들어, FINFO 리소스를 클래스로 캡슐화하고 클래스의 파괴자에서 Finfo_close ()를 호출하여 Finfo_Close ()를 명시 적으로 호출하는 것을 잊어 버리도 자원이 결국 재활용되도록 보장 할 수 있습니다.

 <span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">FileInfoHandler</span></span><span> {
    </span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$finfo</span></span><span>;

    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__construct</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
        </span><span><span class="hljs-variable language_">$this</span></span><span>-&gt;finfo = </span><span><span class="hljs-title function_ invoke__">finfo_open</span></span><span>(FILEINFO_MIME_TYPE);
    }

    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">getMimeType</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$filePath</span></span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">finfo_file</span></span><span>(</span><span><span class="hljs-variable">$this</span></span><span>-&gt;finfo, </span><span><span class="hljs-variable">$filePath</span></span><span>);
    }

    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__destruct</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
        </span><span><span class="hljs-title function_ invoke__">finfo_close</span></span><span>(</span><span><span class="hljs-variable">$this</span></span><span>-&gt;finfo); </span><span><span class="hljs-comment">// 在对象销毁时폐쇄의지</span></span><span>
    }
}
</span></span>

3.3 코드에서 리소스 사용법을 정기적으로 확인하십시오.

코드 검토 및 성능 테스트를 수행 할 때, 특히 자주 사용되는 리소스의 경우, 불분명 한 파일 스트림 또는 데이터베이스 연결을 정기적으로 확인하십시오. 정적 분석 도구 또는 정기적 인 코드 품질 검사를 사용하여 잠재적 인 문제를 효과적으로 발견 할 수 있습니다.

3.4 시도 캐치-패치 구조의 적절한 사용

리소스 관리가 필요한 FINFO 와 같은 기능을 사용하는 경우, Try-Catch-Finally 구조를 사용하면 자원이 해제되도록합니다. 예외가있는 경우에도 최종 블록의 Finfo_close ()가 여전히 실행됩니다.

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$finfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">finfo_open</span></span><span>(FILEINFO_MIME_TYPE);
    </span><span><span class="hljs-variable">$mimeType</span></span><span> = </span><span><span class="hljs-title function_ invoke__">finfo_file</span></span><span>(</span><span><span class="hljs-variable">$finfo</span></span><span>, </span><span><span class="hljs-string">'example.txt'</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// 예외를 처리하십시오</span></span><span>
} </span><span><span class="hljs-keyword">finally</span></span><span> {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$finfo</span></span><span>) {
        </span><span><span class="hljs-title function_ invoke__">finfo_close</span></span><span>(</span><span><span class="hljs-variable">$finfo</span></span><span>); </span><span><span class="hljs-comment">// 确保의지被폐쇄</span></span><span>
    }
}
</span></span>

4. 요약

finfo_close () 함수를 호출하는 것을 잊어 버리는 것은 작은 오류이지만 응용 프로그램의 성능과 안정성에 큰 영향을 줄 수 있습니다. 우수한 자원 관리 습관을 유지하고, 자원을 자동으로 공개하고, 코드의 자원 사용을 정기적으로 확인하고, 오류 처리 메커니즘을 합리적으로 사용하여 개발자는 이로 인한 성능 문제를 효과적으로 피할 수 있으므로 PHP 애플리케이션의 전반적인 효율성과 신뢰성을 향상시킬 수 있습니다.