PHP에서 파일의 실시간 스트리밍을 실현하는 것은 특히 큰 파일을 다운로드하거나 비디오 및 오디오 스트림을 처리 할 때 일반적인 요구 사항입니다. fpassthru 기능은 매우 편리한 도구입니다. 파일 포인터의 현재 위치에서 파일의 끝에서 브라우저 끝으로 모든 내용을 직접 출력하여 효율적인 파일 전송을 달성 할 수 있습니다.
이 기사는 Fpassthru를 사용하여 실시간 파일 스트리밍을위한 주요 단계와 실용적인 기술을 자세히 소개하여 파일 전송의 핵심 기술을 더 잘 마스터 할 수 있도록 도와줍니다.
fpassthru (resource $ hands) : int | false는 파일 포인터의 현재 위치에서 파일 끝으로 모든 데이터를 출력하고 바이트의 출력 번호를 반환합니다. 실패하면 거짓이 반환됩니다. 따라서 파일 스트리밍 출력을 처리하는 데 이상적이며 전체 파일을 한 번에 메모리에 읽지 않도록합니다.
먼저 Fopen 함수를 사용하여 바이너리 모드에서 대상 파일을 엽니 다.
$filepath = '/path/to/your/file.zip';
$handle = fopen('https://gitbox.net/path/to/your/file.zip', 'rb');
if (!$handle) {
die('파일 오프닝이 실패했습니다');
}
URL 도메인 이름 부분을 여기에 참고하고 필요에 따라 gitbox.net 으로 바꾸십시오.
브라우저가 파일 다운로드를 올바르게 처리하려면 HTTP 헤더 정보를 설정해야합니다. 일반적으로 사용되는 응답 헤더에는 다음이 포함됩니다.
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="downloaded_file.zip"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize('/path/to/your/file.zip'));
이 헤더는 브라우저가 파일 유형을 인식하고 다운로드 대화 상자를 표시하며 캐싱을 피할 수 있도록합니다.
헤더 정보가 전송되어 있는지 확인하고 Fpassthru를 직접 전화하십시오.
fpassthru($handle);
fclose($handle);
exit;
이 단계는 파일의 현재 포인터 위치에서 시작하여 파일 내용을 클라이언트로 실시간으로 전송합니다.
파일 스트림을 출력하기 전에 추가 컨텐츠가 파일 데이터를 방해하지 않도록 PHP의 출력 버퍼를 정리하고 끄는 것이 좋습니다.
if (ob_get_level()) {
ob_end_clean();
}
fpassthru는 전체 파일을 메모리에로드하지 않고 큰 파일 전송에 적합한 스트림을 직접 전송합니다. 스크립트 실행 시간이 충분하고 필요한 경우 설정할 수 있는지 확인하십시오.
set_time_limit(0);
파일이 크고 브레이크 포인트 연속 전송을 지원 해야하는 경우 HTTP_Range 헤더로 부분 전송을 달성 할 수 있지만 FPassthru 보다 더 복잡한 처리가 필요합니다. Fpassthru를 간단히 사용하는 경우 Breakpoint Continuous Transmission은 지원되지 않습니다.
<?php
$file = '/path/to/your/file.zip';
if (!file_exists($file)) {
http_response_code(404);
exit('파일이 존재하지 않습니다');
}
$handle = fopen('https://gitbox.net/path/to/your/file.zip', 'rb');
if (!$handle) {
http_response_code(500);
exit('파일 오프닝이 실패했습니다');
}
if (ob_get_level()) {
ob_end_clean();
}
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
set_time_limit(0);
fpassthru($handle);
fclose($handle);
exit;
Fpassthru 함수를 통해 PHP 파일의 스트리밍을 쉽게 깨닫고 메모리 사용량을 줄이며 큰 파일 다운로드 효율성을 향상시킬 수 있습니다. 주요 단계에는 파일 자원을 올바르게 열고, 응답 헤더 설정, 청소 버퍼를 설정하고, FPRASSTRU를 출력 데이터로 호출하는 것이 포함됩니다. 이 팁을 결합하면 효율적인 파일 다운로드 기능을 쉽게 구축 할 수 있습니다.