php下載大檔案時錯誤的解決方法:1、在伺服器上查看nginx日誌;2、 查看到fpm運行身分;3、編輯nginx配置設定身分;4、透過「chown -R daemon / aichenk/soft/nginx/fastcgi_temp/”更改路徑即可。
本教學操作環境:windows7系統、PHP8.1版、Dell G3電腦。
php下載大檔案時錯誤怎麼辦?
記PHP下載大檔案失敗的一次坑
說明
#php提供檔案的儲存和下載,nginx作為web伺服器,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運行身份與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中文網其他相關文章!