2014-04-29 29 views
0

我有一個PHP上傳文件的過程,工作得很好。不過,我想添加一些驗證,以確保大文件沒有上傳,但是當我測試時,我注意到一些奇怪的行爲;PHP的upload_max_filesize和post_max_size要問題

我設置的post_max_size &的upload_max_filesize爲5M(重新啓動服務器),但發現,如果我超過5M上傳的文件大POST數據丟失,所以我不能做$ _FILES [「UploadedFile的」]支票[」大小「]

我還挺解決的問題通過確保的post_max_size &的upload_max_filesize分別設置爲10M(假設當然沒有人會傻得嘗試比大文件 - 其真正的文本文件,所以他們不該」 t)之後,我可以毫無問題地進行尺寸驗證;

if($_FILES['uploadedFile']['size'] < 3072000) 
{     
    //do upload stuff     
} 
else 
{     
    $errorMessage .= 'File size to big, exceeds 3M Limit.'; 
} 

我認爲問題在於POST由於超過了post_max_size而被剔除?我搜遍了很多頁面,但看不到其他人有問題,所以我不確定我的假設是否正確。如果我上傳的文件大於10Mm,我仍然會遇到問題。

+0

http://stackoverflow.com/questions/2733256/post-data-returns-empty-when-headers-are-post-max -size –

回答

0

你是對的。當超過大小限制時,上傳的數據將被忽略。所以,你不能訪問['size']信息。

相反,你需要驗證您上傳的是這樣的:

<?php 

if ($_FILES['uploadedFile']['error'] == UPLOAD_ERR_OK) 
{ 
    // success - move uploaded file and process stuff here 
} 
else 
{ 
    // error 
    switch ($_FILES['uploadedFile']['error']) 
    { 
     case UPLOAD_ERR_INI_SIZE: 
      echo "The uploaded file exceeds the upload_max_filesize directive in php.ini."; break; 

     case UPLOAD_ERR_FORM_SIZE: 
      echo "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form."; break; 

     case UPLOAD_ERR_PARTIAL: 
      echo "The uploaded file was only partially uploaded. "; break; 

     // etc... see the full list here http://uk1.php.net/manual/en/features.file-upload.errors.php 
    } 
} 
+0

謝謝,現在有道理! –