2014-02-07 58 views
2

我有一個讓用戶上傳文件的表單,但我在檢測文件太大時遇到問題。PHP文件上傳和檢測文件大小

我在php.ini下面的一組:

upload_max_filesize = 10M 
post_max_size = 20M 

據我所知,標準的方式來檢測,如果文件比config文件較大允許被檢查$_FILES['file_name']['error']。但是,如果實際文件大於upload_max_filesize且小於post_max_size,這隻適用於我。

如果實際文件大小大於post_max_size那麼$_FILES變量被刪除更大,我得到的日誌消息:

PHP警告:XXX字節POST內容長度超過 YYY的極限.. 。

所以問題:如何檢測用戶是否正在上傳大於post_max_size的文件?如果發生這種情況,我需要顯示有效的用戶消息。

謝謝。

+0

也許你可以開始上傳之前檢查文件的大小。 看到http://www.dotnet-tricks.com/Tutorial/jquery/HHLN180712-Get-file-size-before-upload-using-jquery.html – user1168095

+0

看看這個[類似的問題](http:// stackoverflow。 COM /問題/ 2133652 /如何對優雅,手柄文件 - 即,超過-PHPS-後的最大尺寸)。 – RDrazard

+0

您能否將您在上傳中使用的代碼視爲? – SaidbakR

回答

0

我建議你使用set_error_handler()和檢查E_USER_WARNING錯誤+適當的信息,然後將其發送給用戶,可能通過拋出一個異常,可能還有一些其他的方式。

+0

也可以使用@來抑制錯誤消息。見http://www.php.net/manual/en/language.operators.errorcontrol.php –

+0

@JhulianoMoreno:但是你想把'@'放在...的前面?在我的理解中,這個警告不是由特定的代碼行引發的,但是當腳本啓動時... – CBroe

+0

這個錯誤不能被抑制,最初的問題是OP想要將這個錯誤實際呈現給用戶,而不是隱藏它。 – Eternal1

0

像這樣:

$filesize = $_FILES['file']['size']; 
$limit = ini_get('post_max_size'); 
if($filesize > $limit) { 
    trigger_error("POST Content-Length of $filesize bytes exceeds the limit of $limit bytes.", E_WARNING); 
} 
else { 
    // upload file 
} 
+0

謝謝,但$ _FILES全局是空的,如果文件大小> post_max_size,所以我不能做這個檢查。 – user3285377