현재 위치: > 최신 기사 목록> FPassthru를 사용하여 PHP에서 파일 스트리밍을 구현하는 방법

FPassthru를 사용하여 PHP에서 파일 스트리밍을 구현하는 방법

gitbox 2025-05-28

PHP에서 FPassthru 함수는 매우 실용적인 파일 스트리밍 도구이며, 특히 사진, 비디오, 파일 다운로드 등과 같은 클라이언트에 파일 컨텐츠를 직접 출력하는 데 특히 적합합니다. 가장 큰 장점은 전체 파일을 메모리로 읽지 않고도 파일 컨텐츠를 브라우저로 효율적으로 전송하여 리소스를 저장하고 메모리 오버 플로우 문제를 피할 수 있다는 것입니다.

이 기사는 FPassthru 기능을 사용하여 파일 스트리밍을 구현하고 완전한 샘플 코드를 결합하여 신속하게 시작하는 방법을 자세히 소개합니다.


fpassthru 란 무엇입니까?

fpassthru 는 PHP 파일 작동의 함수이며, 기능은 파일 끝까지 현재 파일 포인터 위치에서 출력하는 것입니다. 종종 Fopen 과 함께 사용됩니다. 파일을 열면 파일 내용이 브라우저에 직접 출력됩니다.

기능 프로토 타입 :

 int fpassthru ( resource $handle )
  • $ 핸들은 fopen () 에서 반환 한 파일 포인터 리소스입니다.

  • 반환 값은 바이트 출력 수입니다.


시나리오를 사용하십시오

  • 파일 다운로드 인터페이스

  • 사진 또는 비디오 스트림의 출력

  • 파일을 클라이언트로 전송 해야하는 모든 시나리오


fpassthru를 사용하여 파일 스트리밍을 구현하는 단계

  1. 파일 <br>을 엽니 다 fopen ()을 사용하여 이진 모드에서 파일을 열어 전송 된 파일이 문자 인코딩의 영향을받지 않도록하십시오.

  2. 올바른 HTTP 헤더를 보내십시오 <br> 파일 유형 (다운로드 된 파일 인 경우)에 따라 해당 컨텐츠 유형 , 컨텐츠 길이컨텐츠 방향을 보내십시오.

  3. FPRASSTRU를 출력 파일 스트림 <br>로 호출하십시오 파일 컨텐츠를 클라이언트에게 직접 내보내십시오.

  4. 파일 리소스를 닫습니다 <br> 자원 누출을 피하기 위해 리소스를 해제하십시오.


완전한 샘플 코드

 <?php
// 파일 경로
$filePath = '/path/to/your/file.zip';

// 파일이 존재하는지 확인하십시오
if (!file_exists($filePath)) {
    header("HTTP/1.1 404 Not Found");
    exit("File not found.");
}

// 파일을 엽니 다
$fp = fopen($filePath, 'rb');
if (!$fp) {
    header("HTTP/1.1 500 Internal Server Error");
    exit("Failed to open file.");
}

// 파일 크기를 얻으십시오
$fileSize = filesize($filePath);

// 설정 HTTP 머리,브라우저 파일 유형과 크기를 알려줍니다
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
header('Content-Length: ' . $fileSize);
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Expires: 0');

// 사용 fpassthru 출력 파일 컨텐츠
fpassthru($fp);

// 파일 리소스를 닫습니다
fclose($fp);
exit;
?>

코드 설명

  • fopen ($ filepath, 'rb') : 이진 읽기 전용 모드에서 파일을 엽니 다.

  • HTTP 헤더 세트는 브라우저가 파일 유형 및 크기를 인식하도록하고 내용은 다운로드 된 파일의 기본 이름을 지정합니다.

  • fpassthru ($ fp)는 파일 포인터의 현재 위치에서 파일 끝으로 직접 모든 데이터를 출력합니다.

  • 파일 핸들을 닫고 종료하여 중복 컨텐츠가 출력되지 않도록하십시오.


주목해야 할 것

  • 파일이 크면 Fpassthru는 모든 파일을 메모리에 읽지 않기 때문에 효율적인 전송 방법입니다.

  • 브라우저가 파일을 올바르게 처리하는지 확인하기 전에 전송하기 전에 적절한 HTTP 헤더를 보내야합니다.

  • 파일 경로가 사용자 입력에서 나온 경우 PATH CROUCHING과 같은 보안 위험을 방지하기 위해 보안 검증을 수행하십시오.

  • 브레이크 포인트 연속 전송을 지원하는 다운로드 요구 사항의 경우 추가 HTTP_RANGE 헤더가 필요 하며이 기사는 자세히 설명하지 않습니다.


요약

위의 단계를 통해 PHP의 fpassthru 기능을 사용하여 효율적인 파일 스트리밍을 쉽게 사용할 수 있습니다. 간결한 코드와 우수한 성능을 갖춘 모든 종류의 파일 다운로드 및 스트리밍 미디어 출력 시나리오에 적합합니다.

파일 다운로드 인터페이스 또는 미디어 스트리밍 서비스를 구축 해야하는 경우 Fpassthru를 사용해 볼 수도 있습니다.이를 통해 코드를보다 간결하고 효율적으로 만들 수 있습니다.