首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 上傳檔案大小限制完整配置:php.ini 三大參數、Nginx/Apache 客戶端限制、執行時間

     編輯:PHP 綜合知識

大檔上傳失敗常見原因:php.ini 限制、Web Server 客戶端 Body 限制、腳本執行超時。本文系統整理三層配置、修改方式、驗證方法。

PHP 層:php.ini 三大參數

參數預設建議大檔值說明
upload_max_filesize2M100M單檔最大
post_max_size8M150M整個 POST Body 最大,**必須 > upload_max_filesize**
max_execution_time30s0 (無限制) 或 300腳本最大執行秒數,大檔需更久
max_input_time60s300解析輸入資料最大秒數
memory_limit128M256M+腳本記憶體上限,處理大檔可能需更多

修改方式

# 1. 找到 php.ini
php --ini
# 2. 編輯
upload_max_filesize = 100M
post_max_size = 150M
max_execution_time = 300
max_input_time = 300
memory_limit = 256M
# 3. 重載 PHP-FPM / Apache
systemctl reload php-fpm
# 或 Apache
systemctl reload httpd

運行時修改(.htaccess / .user.ini / ini_set)

<?php
// 僅能調小,不能調大 upload_max_filesize/post_max_size
ini_set('max_execution_time', '300');
// .user.ini (PHP 5.3+,針對目錄)
upload_max_filesize = 100M
post_max_size = 150M
# .htaccess (Apache + mod_php)
php_value upload_max_filesize 100M
php_value post_max_size 150M

Web Server 層:客戶端 Body 限制

Nginx

http {
    client_max_body_size 150M; # 預設 1M,必須調大
}
# 或 server/location 區塊
server {
    client_max_body_size 150M;
}

Apache

# httpd.conf 或 .htaccess
LimitRequestBody 157286400  # 150M = 150*1024*1024 bytes
# 注意:LimitRequestBody 單位是 bytes

前端表單

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="104857600"> <!-- 100MB,瀏覽器端攔截(可繞過) -->
    <input type="file" name="file">
    <button type="submit">上傳</button>
</form>

驗證清單

  1. php -i | grep -E 'upload_max_filesize|post_max_size|max_execution_time' 確認生效。
  2. Nginx nginx -T | grep client_max_body_size 確認生效。
  3. 實測上傳 100MB 檔案,觀察錯誤碼 $_FILES['file']['error']:
錯誤碼常見原因
UPLOAD_ERR_INI_SIZE超過 upload_max_filesize
UPLOAD_ERR_FORM_SIZE超過表單 MAX_FILE_SIZE
UPLOAD_ERR_PARTIAL上傳中斷(網路/超時)
413 Request Entity Too LargeNginx/Apache 攔截
504 Gateway Timeout上傳時間超過 proxy_read_timeout

大檔上傳進階方案

  • 分片上傳:前端切片(如 5MB/片),並發上傳,後端合併(支援斷點續傳)。
  • 直傳雲存儲:簽名 URL 直傳 OSS/S3,後端僅處理回調,減輕伺服器頻寬。
  • 非同步處理:上傳到暫存區 → 回傳接受 → 背景 Worker 處理/掃毒/轉碼。

結語

「PHP.ini → Web Server → 前端」三層限制缺一不可。大檔上傳必須分片/直傳/非同步,單一請求上傳 GB 級檔案在生產環境不可行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved