현재 위치: > 최신 기사 목록> fpassthru와 file_get_contents의 차이점은 무엇입니까? fpassthru 함수는 언제 선호되어야합니까?

fpassthru와 file_get_contents의 차이점은 무엇입니까? fpassthru 함수는 언제 선호되어야합니까?

gitbox 2025-08-27

<span><span><span class="hljs-meta"><?php</span></span><span> </span><span><span class="hljs-comment">// 本文旨在解释 PHP 中 fpassthru 和 file_get_contents 两个函数的区别,并分析在实际应用中如何选择它们。</span></span><span> </span><span><span class="hljs-comment">// ------------------------------------------------------------</span></span><span> </span><span><span class="hljs-comment"># fpassthru 和 file_get_contents 有什么区别?什么时候应该优先选择 fpassthru 函数?</span></span><span> 在 PHP 中处理文件内容时,`</span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>()` 和 `</span><span><span class="hljs-title function_ invoke__">fpassthru</span></span><span>()` 是两个常用的函数,它们虽然都可用于读取文件,但使用场景和性能表现存在明显差异。了解它们的差异,对于编写高效、可靠的代码至关重要。 </span><span><span class="hljs-comment">## file_get_contents 简介</span></span><span> `</span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>()` 是一个一次性读取整个文件内容的函数。它将文件内容作为字符串返回,适用于文件体积不大,且需要对内容进行进一步处理的场景。 **语法:** ```php </span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>); </span></span>

  • 간단하고 사용하기 쉽습니다.

  • 컨텐츠는 변수에 직접 할당 할 수 있습니다.

  • 네트워크 흐름에 사용할 수 있습니다 (HTTP 및 FTP 프로토콜 지원).

결점:

  • 한 번에 파일을 메모리에 읽습니다. 큰 파일에는 적합하지 않습니다.

  • 자원 흐름에 대한 제어가 적습니다.

fpassthru 소개

fpassthru ()는 파일 끝까지 열린 파일 포인터에서 데이터를 읽기 시작하고 표준 출력으로 직접 출력합니다. 일반적으로 파일 내용을 브라우저로 직접 전송하는 데 사용되며 특히 큰 파일의 효율적인 전송에 적합합니다.

문법:

 <span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-string">'rb'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fpassthru</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span></span>

이점:

  • 큰 파일 또는 스트리밍 출력 (예 : 비디오, 파일 다운로드)에 적합합니다.

  • 많은 기억이 필요하지 않습니다.

  • 직접 출력 중간 변수를 피하십시오.

결점:

  • 파일 내용은 변수로 직접 검색 할 수 없습니다.

  • 사용하기 전에 파일 핸들을 수동으로 열어야합니다.

핵심 차이 비교

특성 file_get_contents fpassthru
반환 값 문자열 (파일 내용) 출력 파일 컨텐츠, 리턴 값 없음
메모리 사용 전체 파일이 메모리에로드됩니다 스트리밍 읽기, 낮은 메모리 사용
처리에 적합한 데이터 크기 작은 파일 (예 : 구성, 템플릿) 큰 파일 (예 : 비디오, 콘텐츠 다운로드)
사용 복잡성 단순한 조금 복잡합니다 (손잡이를 열어야합니다)
직접 출력 여부 아니요

언제 먼저 fpassthru를 선택해야합니까?

다음 시나리오에는 fpassthru ()가 권장됩니다.

  1. 대형 파일 다운로드 (예 : Zip, PDF, MP4) :
    과도한 메모리 사용을 피하고 성능을 향상시킬 수 있습니다.

  2. 스트림에서 클라이언트로 데이터를 전송합니다 .
    HTTP 헤더와 함께 다운로드 인터페이스는 readfile () 또는 fpassthru () 와 함께 조합하여 구현할 수 있습니다.

  3. 중간 처리없이 직접 출력 :
    파일을 전송 해야하는 경우 컨텐츠 분석이나 수정이 필요하지 않습니다.

예 : fpassthru ()를 사용하여 파일 다운로드 기능을 구현하십시오

 <span><span><span class="hljs-variable">$filename</span></span><span> = </span><span><span class="hljs-string">'large-file.zip'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: application/zip'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Disposition: attachment; filename="'</span></span><span> . </span><span><span class="hljs-title function_ invoke__">basename</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>) . </span><span><span class="hljs-string">'"'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Length: '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">filesize</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>));
</span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>, </span><span><span class="hljs-string">'rb'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fpassthru</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>;
</span></span>

요약

file_get_contents () 또는 fpassthru () 의 선택은 파일을 처리 해야하는 방법에 따라 다릅니다. 파일 컨텐츠를 가져 와서 논리적 처리를 수행 해야하는 경우 file_get_contents ()를 선택하는 것이 더 편리합니다. 처리하지 않고 클라이언트로 파일을 효율적으로 전송 해야하는 경우 fpassthru ()가 더 적합한 선택입니다.

그들의 차이를 이해하면 필요에 따라보다 효율적이고 강력한 PHP 프로그램을 작성하는 데 도움이 될 수 있습니다.

 <span></span>