PHP가 대용량 파일을 다운로드할 때 발생하는 오류에 대한 해결 방법: 1. 서버에서 nginx 로그를 봅니다. 2. fpm 실행 ID를 봅니다. 3. nginx 구성을 편집하여 ID를 설정합니다. aichenk/soft/nginx/fastcgi_temp/" 경로를 변경하면 됩니다.
이 튜토리얼의 운영 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!