1. 程式人生 > >影響 POST 請求檔案上傳失敗的幾個環節的配置(php + nginx)

影響 POST 請求檔案上傳失敗的幾個環節的配置(php + nginx)

寫在前面

最近寫一個 php 介面,接受上傳的檔案,發現檔案只要超過 5m 以上就會無響應失敗,最後發現是 shadowsocks 的 timeout 設定問題(我全程開了全域性的 VPN),但一開始並不知曉,把 nginx 和 php 的相關配置都看了個遍,乾脆記錄一下,以後遇到此類問題可以按照這個邏輯順序去排查。

零、環境

PHP Version 7.0.10

一、php

通過修改 php.ini

1、上傳相關

options type desc remark
file_uploads boolean 是否允許 HTTP 檔案上傳 'On' or 'Off'
upload_tmp_dir string 上傳時儲存檔案的臨時目錄。 如果未指定,將使用系統的預設值(/tmp)。
upload_max_filesize integer 上傳檔案的最大大小。 是所有檔案欄位的大小總和。
post_max_size integer post_max_size = upload_max_filesize + 所有其他欄位的長度(跟檔案比微不足道) post_max_size 一般略大於upload_max_filesize,但為了省事可以直接讓它們相等。
max_file_uploads integer 允許同時上傳的最大檔案數。(提交時保留空白的上傳欄位不計入此限制)

注:upload_max_filesizepost_max_size 可以用速記表達:K (for Kilobytes), M (for Megabytes) and G (for Gigabytes; available since PHP 5.1.0) ,不區分大小寫。

2、時間相關

options type desc remark
max_input_time integer 指令碼解析輸入資料允許的最大時間,單位是秒。 它從接收所有資料到開始執行指令碼進行測量的。
max_execution_time integer 這設定了指令碼被解析器中止之前允許的最大執行時間,單位秒。 這有助於防止寫得不好的指令碼佔盡伺服器資源。 你的 web 伺服器也可以有其他超時設定。

max_input_timemax_execution_time

3、記憶體相關

options type desc remark
memory_limit integer 這將設定允許指令碼分配的最大記憶體量(以位元組為單位)。這有助於防止編寫糟糕的指令碼佔用伺服器上的所有可用記憶體。 要沒有記憶體限制,請將此指令設定為-1

二、nginx

通過修改 nginx.conf

options type desc remark
client_max_body_size integer

返回 413(請求實體太大)錯誤。

三、shadowsocks

通過修改 preferences

options type desc remark
timeout integer 超時時間

image-20181113153056476

返回 net::ERR_CONNECTION_RESET 錯誤。