2012-06-12 24 views
0

當上傳的圖片大小超過3MB時,我想輸出一條錯誤消息。 這是我現在的代碼。當圖片大小超過3MB時,它會正確顯示錯誤消息,但是當沒有圖片上傳時也會顯示錯誤消息。我該如何解決?文件上傳中的PHP錯誤處理

//image check start 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/png") 
|| ($_FILES["file"]["type"] == "image/pjpeg")) 
&& ($_FILES["file"]["size"] < 3072000)) 
//image check end 
{ 
    if($_FILES['file']['size'] > 0) 
    { 
     file uploading script 
    } else { 
     do nothing 
    } 
} else { 
    error("Maximum image size exceeded or invalid file format."); 
} 
+0

首先,你應該檢查文件是否上傳,然後檢查文件大小和圖像類型。祝你好運! – Firula

+0

也許你只需要檢查[這個答案](http://stackoverflow.com/a/8921132/1015609) –

回答

0

問題是

upload_max_filesize = 3M 
在我的php.ini文件

。 當我改變它爲

upload_max_filesize = 4M 

一切工作得很好。

謝謝。

+1

這不是你原來的問題的答案,你不應該給自己信用。是的,你真正的問題可能已經消失,但其他人已經花時間和精力回答了你實際提出的問題,即使你不再在意,他們也應該得到某種令人尊敬的尊重。 – DaveWalley

0

好吧,如果你認爲你的條件時,沒有文件上傳,你會看到,它會失敗,因爲沒有你的類型檢查將返回true,因此它會最終後降落在錯誤行其他。

你會需要這樣的事:

if ($_FILES['file']['size'] == 0) 
{ 
    // do nothing 
} else { 
    //image check start 
    if ((($_FILES["file"]["type"] == "image/gif") 
    || ($_FILES["file"]["type"] == "image/jpeg") 
    || ($_FILES["file"]["type"] == "image/png") 
    || ($_FILES["file"]["type"] == "image/pjpeg")) 
    && ($_FILES["file"]["size"] < 3072000)) 
    //image check end 
    { 
     file uploading script 
    } else { 
     error("Maximum image size exceeded or invalid file format."); 
    } 
} 

顯然,如果你真的需要做什麼,如果沒有文件上傳,這將做到:

if ($_FILES['file']['size'] != 0) 
{ 
    //image check start 
    if ((($_FILES["file"]["type"] == "image/gif") 
    || ($_FILES["file"]["type"] == "image/jpeg") 
    || ($_FILES["file"]["type"] == "image/png") 
    || ($_FILES["file"]["type"] == "image/pjpeg")) 
    && ($_FILES["file"]["size"] < 3072000)) 
    //image check end 
    { 
     file uploading script 
    } else { 
     error("Maximum image size exceeded or invalid file format."); 
    } 
} 
+1

你的意思是'=='不是'=' – Mike

+0

'當然 - 感謝邁克! (編輯答案) – Izhaki

+0

它仍然沒有工作,但我標記你的答案被接受,因爲現在我使用你的第二個代碼。謝謝。 – gyogyo0101

0

首先,你應該始終啓用調試時在腳本中報告錯誤。如果您不確定您的錯誤是從,你未來隨時可以嘗試做print_r($_FILES);,只是經過邏輯,你必須在它上面可以通過

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

做到這一點。檢查$_FILES['file']['error']變量file upload errors。如果上傳成功,則其值將爲0

if ($_FILES["file"]["error"] !== 0) { 
    if ($_FILES["file"]["size"]) > 0) { 
     if ((($_FILES["file"]["type"] == "image/gif") 
     || ($_FILES["file"]["type"] == "image/jpeg") 
     || ($_FILES["file"]["type"] == "image/png") 
     || ($_FILES["file"]["type"] == "image/pjpeg")) 
     && ($_FILES["file"]["size"] < 3072000)) 
     //image check end 
     { 
      if($_FILES['file']['size'] > 0) { 
       // file uploading script 
      } 
      else { 
       // do nothing 
      } 
     } 
     else { 
      error("Maximum image size exceeded or invalid file format."); 
     } 
    } 
    else { 
     error("Error uploading file. File has size of 0 bytes"); 
    } 
} 
else { 
    error("There was an error uploading the file. 
     File upload returned error code: " . $_FILES["file"]["error"] 
    ); 
}