進度條

[WordPress][教學][架站] 基本使用 #05. 改變最大上傳檔案大小以及相關的風險

[WordPress][教學][架站] 基本使用#05. 改變最大上傳檔案大小以及相關的風險

作者: 進度條編輯群 更新日期:

此文章也有影片介紹,可以搭配影片一起學習!

01. 改變最大上傳檔案大小以及相關的風險 (所屬課程)


以下正式開始文章


在Wordpress 後台中上傳檔案的地方,內建的上傳檔案容量有預設限制。

所以,今天這堂課程就是要來教導如何「更改」預設限制,以及了解「為什麼」要來更改這些限制。

 

Step.1 找尋php.ini檔案 ,並且使用Brackets開啟。

(備註: PHP版本更換的話,設定要再進行設定一次,例如本課程是使用7.0.20版本,如果之後PHP版本更換成7.1.6版,你的設定檔並不會沿用。也就是說預設是一個版本對一個php.ini,你的系統裡面可能有很多php.ini檔,如果改錯的話就什麼事都不會發生。)

 

開啟至php資料夾後,會有很多PHP版本,請選擇你自己網頁所顯示之PHP版本。

 

 


這個頁面所顯示的其實就是php的函數 phpinfo() 的內容。所以即使你不是使用MAMP,只是你用的是PHP,你都可以利用phpinfo()找到php.ini設定檔喔!
 

 

當開啟檔案後,我們要開始找尋以下五個設定來做更改。

upload_max_filesize  <= 最大上傳檔案大小
post_max_size  <= 使用 HTTP Method Post 傳輸的最大大小 (Post 不一定是傳檔案)
memory_limit  <=  單一PHP程式最大記憶體使用量 (總不可能讓一個程式用到8GB的記憶體空間吧?)
max_execution_time <= 程式最長執行時間(超過就會timeout 跳掉)
max_input_time  <=  最長資料傳入時間(超過就會timeout 跳掉)

 

Step.2 找尋 「upload_max_filesize」設定

upload_max_filesize:  最大上傳檔案大小。

 

 

在未更改設定之前,所預設的容量應該是2Mb。

更改這個設定限制時,建議要因應自己的網站導向來做設定,例如,顯示圖片的網站,就不建議設定容量太大,通常圖片一張1Mb來講就算大了,如果上傳的圖片容量偏大,網站的速度會大幅影響。

但有些網站例外,像進度條的網站時常會有一些程式要提供給學員下載,而程式的容量有大有小
所以我們就要設定限制大一點。

更改此設定時要考慮到網站頻寬問題,此時如果你所上傳的檔案又是可以提供給人家下載的,你所提供的附加檔案容量又不小,如果同時間有許多人來下載,很可能造成你的網站頻寬不足。

因此建議設定「64Mb」就好。有考慮提供上傳其他附加檔案可以再上條(影片應該是不夠用)。

 

Step.3  找尋 「post_max_size」設定

post_max_size : 因為在傳送檔案時候,用的是Http的POST來做傳送,所以這邊的POST設定也要做更改。

建議設定「64Mb」。

 

 

Step.4  找尋 「memory_limit」設定

memory_limit :  執行一個Script(程式)時,可以消耗的最大記憶體容量設定。

 

 

那更改這個設定關係的層面就比較廣了,我們先來看我們上傳檔案介面的網址「 localhost:8888/wp-admin/upload.php 」

這裡要分兩件事來看會比較容易懂!

首先 upload.php 這個檔案呢,裡面記載的程式碼的功能,即是顯示出我們上傳檔案的介面,如下圖:

 

 

再來是,選擇要上傳的檔案後,檔案上傳的處理則是由後台的另外一隻PHP程式碼來工作,在(1)上傳檔案後,(2)後台執行檔案儲存,(3)完成上傳,完成這三個步驟的程式中間是沒有間斷的,意思是說,memory_limit 所設定的限制包含以下容量(顯示上傳檔案介面+處理檔案上傳程式+上傳檔案的容量),以上三個元素加起來,算在一個php程式上(也就是一個Script)。

因此,設定此限制(memory_limit)時,建議依據上傳檔案的容量限制( upload_max_filesize ) 的設定來訂定,因為如果設定 memory_limit 為64Mb , 你上傳的檔案也剛好為64Mb 這樣容量就不夠執行這個PHP Script了。

此設定建議設置為128Mb。如過設定容量太大,則需考慮主機記憶體能力。

 

Step.5 找尋 「 max_execution_time   」設定

max_execution_time : 執行一個Script(程式)時,超過所設置的時間,即會停止。

 

 

原本預設的設置為30秒,但考慮到主機速度、網路速度、上傳檔案容量…等因素,因此在課程這邊設置為600秒,但每跑一個(Script)程式時,系統會預留  memory_limit 所設置的容量空間,如上圖設置, memory_limit 的設置為128mb,則 max_execution_time 設置為600秒。

如果有10個人同時使用這個Script(程式),在這600秒內已經被占走了1280mb的記憶體,因此記憶體如果容量不足,在這段時間內就很容易無法執行下去,造成網站無法運作。

因此這也是設置這項設定的風險之一。

 

Step.6  找尋 「  max_input_time    」設定

max_input_time :  此設定是針對「input」這個動作所耗費的時間來做設置。

 

 

舉例來說,現在要上傳一支影片,並且在後台要執行一支程式來轉檔這支影片。此時,影片上傳完成後,在轉檔的過程中,因為轉檔程式有些問題,造成轉檔工作進入無限循環。

此時進入無限迴圈所限制的時間設定並非為 max_input_time,而是 max_execution_time 的時間限制上頭,原因是,上傳這個動作所花費的時間是算在(max_input_time),而執行轉檔程式(Script)則是算在max_execution_time 的時間限制裡面,但max_execution_time 又包含了 max_input_time 所花費的時間。(總程式執行時間當然包含上傳的時間)
 

拿上面圖片的設定來舉例,我今天上傳了一支影片,花費了30秒,進入轉檔程式後,結果陷入無限迴圈無法完成轉檔,只要再過570秒,max_execution_time 就會執行600秒限制,而中止程式(Script)。


所以就邏輯上來講需要 memory_limit >= post_max_size >= upload_max_filesize與 max_execution_time >= max_input_time 

 

不過如果你怕麻煩,就都設一樣也無所謂,畢竟我們設的是「上限」

 

 

Step.7 完成以上設定,重啟MAMP。

重啟之後,重新整理上傳檔案介面,就可以看見「最大上傳檔案大小: 64mb」,這樣就完成了改變最大上傳檔案大小。

 

在網站中,只要有使用者可以輸入資料的地方,就會有一定的風險存在,因為你不知道使用者會再輸入欄裡面輸入什麼,所以建議用選單式的輸入,「限制」使用者輸入的東西,以確保他們輸入的內容,可以多一道防護。

 

以Apache為Web Server的選項,按照以上設定就可以完成更改,是沒有問題的。

 

不過如果你是用Nginx的話,Nginx自己也有設一道上傳大小防護,這是PHP/WordPress管不到的,印象中預設也是2mb。所以如果你今天用Nginx的話就還要再多調整它的參數。

 

當然你今天還有各種防火牆與防護程式或是使用虛擬主機Web Hosting,都有可能有其他的防護措施。這時候光調整php.ini是不夠的喔!!(建議是先調整php.ini,發現不行後再去看看其他的程式是否也有擋或是問服務商客服人員喔,他們收錢賣你服務當然是他們負責啊!)
 

 


最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!

圖文系列教學: WordPress 新手基本操作

Small logo

進度條編輯群

進度條編輯團隊