>  기사  >  백엔드 개발  >  PHP에서 대용량 파일을 다운로드할 때 오류가 발생하면 어떻게 해야 합니까?

PHP에서 대용량 파일을 다운로드할 때 오류가 발생하면 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2022-11-13 09:47:121748검색

PHP가 대용량 파일을 다운로드할 때 발생하는 오류에 대한 해결 방법: 1. 서버에서 nginx 로그를 봅니다. 2. fpm 실행 ID를 봅니다. 3. nginx 구성을 편집하여 ID를 설정합니다. aichenk/soft/nginx/fastcgi_temp/" 경로를 변경하면 됩니다.

PHP에서 대용량 파일을 다운로드할 때 오류가 발생하면 어떻게 해야 합니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 8.1, Dell G3 컴퓨터.

PHP에서 대용량 파일을 다운로드할 때 오류가 발생하면 어떻게 해야 하나요?

PHP가 대용량 파일을 다운로드하지 못했을 때의 함정을 기억하세요

Explanation

php는 파일 저장 및 다운로드를 제공하고 nginx는 웹 서버 역할을 하며 fpm은 구문 분석을 수행합니다.

현상

5M 사진을 다운로드할 때 항상 다운로드에 실패했다는 메시지가 표시되거나, 다운로드한 파일이 불완전하고 이미지의 일부만 표시됩니다(다운로드마다 다름)

php 다운로드 관련 코드

$file = BASE_PATH . '/public/files/IMG_5727.jpg';
$size = filesize($file);
header( "Content-type: application/octet-stream" );
header("Accept-Ranges: bytes");
header("Accept-Length: {$size}");
header("Content-Disposition: attachment; filename=IMG_5727.jpg");
$fp = fopen($file, 'rb');
$readBuffer = 4096;
while (!feof($fp)) {
    echo fread($fp, $readBuffer);
}
fclose($fp);

해결책

이리저리 검색한 후 nginx 로그를 확인하려고 서버에 갔더니 정말 오류 메시지가 떴습니다

2020/05/06 13:09:13 [crit] 1482#0: *23258 open() "/aichenk/soft/nginx/fastcgi_temp/4/17/0000000174" failed (13: Permis
sion denied) while reading upstream, client: 172.21.0.12, server: 192.168.5.5, request: "GET /temp/t2 HTTP/1.1", upstr
eam: "fastcgi://127.0.0.1:9001", host: "192.168.5.5:8080"

nginx에서 권한 문제가 나타났고 결국 nginx 실행 ID를 fpm

# fpm配置
[www]
user = daemon
group = daemon
 
# 查看到fpm运行身份为`daemon`,编辑nginx配置设置身份
 
# nginx配置
#user  nobody;
user daemon;

로 통합했습니다. 이전 경로 소유권 사용자 변경됨

chown -R daemon /aichenk/soft/nginx/fastcgi_temp/

테스트 통과

설명

개인적 분석: 이 오류는 실제로 버퍼에 데이터를 담을 때 반영되는 오류입니다. 이론적으로는 대용량 파일뿐만 아니라 특정 값을 초과하는 데이터 전송량도 발생합니다. 환경을 설정할 때 주의하세요

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP에서 대용량 파일을 다운로드할 때 오류가 발생하면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.