2011-10-31 81 views
17

我正在嘗試使用PHP上傳東西,並對允許上傳的總大小設置了限制。我想限制我上傳到2MB,但由於某種原因,每當我試圖檢查與if語句是這樣的:

if (($_FILES["file"]["size"] < 2097152)) 

是大(如7MB文件)的文件將通過if語句,因爲無論什麼原因,如果我打印$ _FILES [「文件」] [「大小」],它將返回0,而不是正確的字節數。如果我嘗試上傳比較小的東西,比如342kb,$ _FILES [「file」] [「size」]將返回正確的大小。

有無論如何得到$ _FILES [「文件」] [「大小」]實際上保持文件的大小?否則,我不知道如何解決這個問題。

+1

你的php.ini中可上傳數據的限制是什麼?你確定你試圖上傳的文件(7MB)確實上傳了嗎?我認爲這不是... – Marco

+0

我不是100%確定,但文件的最大上傳大小是由php.ini,php配置文件設置的。如果文件大於該限制,它將永遠不會被上傳到開始,這就是爲什麼你會得到一個文件大小爲0. –

+0

嘗試'var_dump($ _ FILES);';)並檢查錯誤報告... –

回答

25

從而中止了的文件任何原因(上傳失敗,超過了限度,等...)將顯示爲大小0

你必須檢查上傳成功,你做任何事情日eupload數據的其餘部分之前:

if(array_key_exists('file', $_FILES)){ 
    if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { 
     echo 'upload was successful'; 
    } else { 
     die("Upload failed with error code " . $_FILES['file']['error']); 
    } 
} 

錯誤代碼定義爲here。在你的情況下,如果你對2meg限制進行了硬編碼並且有人上傳了2.1 meg文件,那麼錯誤代碼將是UPLOAD_ERR_INI_SIZE(又名2),它是「超過.ini文件中設置的限制」。

+0

好的答案,真的。爲你+1;) – Marco

+0

謝謝你,這是非常有益的。 – user494216

+1

錯誤代碼是0,大小也是0 ...我們如何解決這個問題? – Deji

4
if($_FILES['file']['size'] && $_FILES['file']['size'] < (2<<20)) 

試試看。

< <是按位移運算符,小數點2是二進制「10」,然後加20個零。

+4

非常好的方式,雖然你可以解釋代碼 - 不是每個人都知道如何使用二進制移位來做功率計算 –

1

我在之前的評論中假設你的問題是php.ini中可上載文件的限制小於7MB。
所以,你可以嘗試使用

if ($_FILES["file"]["size"] > 0 && $_FILES["file"]["size"] < 2097152) 

想想看,如果你把你的極限(在php.ini中)爲2MB,該檢查可以很容易地寫爲

if ($_FILES["file"]["size"] > 0) 
相關問題