如果在 WordPress 架設的網站上傳大型檔案時遇到錯誤,可以參考這裡的步驟教學來解決。
一般使用 WordPress 所架設的網站,在預設的設定之下是沒有辦法上傳太大型的檔案的,我們可以在「上傳新媒體檔案」的頁面看到目前網站設定的最大上傳檔案大小。
如果上傳的檔案大小超過限制,就會出現這樣的錯誤訊息:
以下我們介紹該如何修改網站的設定,解除上傳檔案大小的限制,讓我們可以上傳大型的檔案。
上傳檔案的限制只要是由 PHP 的設定所控制的,而 PHP 的設定可以透過下面幾種方式修改。
functions.php
第一種方式是修改 WordPress 佈景主題的 functions.php
,加入這幾行設定,而裡面的各個設定值就依照個人的需求來調整:
@ini_set( 'upload_max_filesize', '16M' ); // 單一檔案大小上限 @ini_set( 'post_max_size', '32M'); // POST 資料大小上限 @ini_set( 'memory_limit', '64M' ); // 記憶體上限 @ini_set( 'max_execution_time', '300' ); // 執行時間上限,單位為秒
但這種方式不見得每一個人都可以使用,我個人也不喜歡使用這樣的方式。如果無法使用這種方式的人,可嘗試下面幾種其他的方式。
php.ini
最標準的做法是直接修改 PHP 的 php.ini
設定檔,找到對應的設定,修改成自己需要的數值。
修改單一檔案大小上限:
; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize = 16M
修改 POST 資料大小上限:
; Maximum size of POST data that PHP will accept. ; Its value may be 0 to disable the limit. It is ignored if POST data reading ; is disabled through enable_post_data_reading. ; http://php.net/post-max-size post_max_size = 32M
修改記憶體上限:
; Maximum amount of memory a script may consume (128MB) ; http://php.net/memory-limit memory_limit = 64M
修改執行時間上限(單位為秒):
; Maximum execution time of each script, in seconds ; http://php.net/max-execution-time ; Note: This directive is hardcoded to 0 for the CLI SAPI max_execution_time = 300
最後重新啟動 PHP 讓新設定生效:
sudo service php5-fpm restart
如果您的網頁伺服器是使用 nginx,除了修改上述的 PHP 設定之外,nginx 本身的檔案大小限制設定也需要一起修改,否則就會出現這樣的錯誤訊息:
2016/02/01 15:31:45 [error] 20830#0: *1143155 client intended to send too large body: 3164703 bytes, client: 108.162.222.88, server: blog.gtwang.org, request: "POST /wp-admin/async-upload.php HTTP/1.1", host: "blog.gtwang.org", referrer: "http://blog.gtwang.org/wp-admin/post.php?post=13249&action=edit"
若是在 nginx 的 log 檔中看到這樣的錯誤,就在 nginx.conf
設定檔中加入這一行設定就可以解決了:
http { client_max_body_size 32m; }
然後重新啟動 nginx 讓新設定生效:
sudo service nginx restart
或是重新載入設定也可以:
sudo service nginx reload
修改完成之後,WordPress 上面的檔案大小限制就會是新的設定值。
這樣上傳大型檔案就沒有問題了。
參考資料:PHP Manual、Kinsta、nginx