2013-05-03 68 views
0

我使用此代碼作爲郵件的形式,用戶可以附加一個文件,並通過電子郵件發送。我想知道我可以添加什麼代碼來將附件的文件大小限制爲5 MB。我正在使用這個ShotDev.Com教程中的代碼。謝謝。PHP的郵件和文件附件大小限制

  <html> 
      <head> 
      <title>ShotDev.Com Tutorial</title> 
      </head> 
      <body> 
      <? 
       $strTo = $_POST["txtTo"]; 
        $strTo = "[email protected]"; 
       $strSubject = $_POST["txtSubject"]; 
        $strMessage1 = ($_POST["txtrar"]); 
       $strMessage2 = ($_POST["txtDescription"]); 
    $strMessage3 = ($_POST["coname"]); 
    $strMessage4 = ($_POST["address1"]); 
    $strMessage5 = ($_POST["address2"]); 

     $strMessage6 = ($_POST["city"]); 

      $strMessage7 = ($_POST["state"]); 

       $strMessage8 = ($_POST["zip"]); 

        $strMessage9 = ($_POST["country"]); 


    $strMessage10 = ($_POST["phone"]); 

    $strMessage11 = ($_POST["fax"]); 

//*** Uniqid Session ***// 
$strSid = md5(uniqid(time())); 

$strHeader = ""; 
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"].""; 

$strHeader .= "MIME-Version: 1.0\n"; 
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n"; 
$strHeader .= "This is a multi-part message in MIME format.\n"; 

$strHeader .= "--".$strSid."\n"; 
$strHeader .= "Content-type: text/html; charset=utf-8\n"; 
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n"; 

$strHeader .= $strMessage."\n\n"; 


$strHeader .= $strMessage1."  \n\n "; 

    $strHeader .= $strMessage2."\n\n"; 

    $strHeader .= " <br> <br> Company Name: \n\n "; 

      $strHeader .= $strMessage3."\n\n"; 

      $strHeader .= " <br> <br>Address1: \n\n "; 

       $strHeader .= $strMessage4."\n\n"; 

       $strHeader .= " <br> <br>Address2: \n\n "; 
        $strHeader .= $strMessage5."\n\n"; 

         $strHeader .= " <br> <br>City: \n\n "; 
         $strHeader .= $strMessage6."\n\n"; 

          $strHeader .= " <br> <br>State: \n\n "; 
          $strHeader .= $strMessage7."\n\n"; 

           $strHeader .= " <br> <br>Zip: \n\n "; 
           $strHeader .= $strMessage8."\n\n"; 

            $strHeader .= "<br> <br>Country: \n\n "; 
            $strHeader .= $strMessage9."\n\n"; 

           $strHeader .= " <br> <br>Phone: \n\n "; 
          $strHeader .= $strMessage10."\n\n"; 
            $strHeader .= " <br> <br>Fax: \n\n "; 
           $strHeader .= $strMessage11."\n\n"; 




//*** Attachment ***// 
if($_FILES["fileAttach"]["name"] != "") 
{ 
    $strFilesName = $_FILES["fileAttach"]["name"]; 
    $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 

    $strHeader .= "--".$strSid."\n"; 
    $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
    $strHeader .= "Content-Transfer-Encoding: base64\n"; 
    $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n"; 
    $strHeader .= $strContent."\n\n"; 
} 


$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error // 

if($flgSend) 
{ 
    echo "Mail send completed."; 
} 
else 
{ 
    echo "Cannot send mail."; 
} 
?> 
</body> 
</html> 
<!--- This file download from www.shotdev.com --> 
+2

參考:如果一個問題是添加http://stackoverflow.com/questions/9153224/how-to-limit-file-upload-type-file-size-in-php – 2013-05-03 16:02:14

+1

也許會更好到帖子的結尾。 – Freakyuser 2013-05-03 16:18:58

回答

1

$_FILES["fileAttach"]["size"]應該指出附件的大小。您可以添加條件檢查以確保它小於您的限制尺寸要求。

例如:

$MAX_SIZE = 5242880; // Some arbitrary size (in bytes) 

if($_FILES["fileAttach"]["size"] >= $MAX_SIZE) { 
    echo "File is too large!"; 
} 

else { 
    // Your send code here! 
} 

這也可能是很重要地注意到,PHP限制上傳的最大尺寸,以及(在php.ini的upload_max_filesize)。

+0

你也可以添加一個HTML元素到你的表單中,指定最大大小,但它不會評估它,直到整個文件上傳,所以應該只用作故障安全http://stackoverflow.com/questions/6327965/html-upload -max-file-size-does-not-appear-to-work – 2013-05-03 16:18:20

+1

只是一個FYI:$ _FILES [「fileAttach」] [「size」]中的文件大小將以字節爲單位 – 2013-05-03 16:22:37

+0

爲什麼太大if($ _ FILES [ 「fileAttach」] [「size」] <$ MAX_SIZE) 您可能會犯錯路易斯.. – 2013-05-03 16:28:07

0
<?php 
$maxsize = 2097152; // set you file size here current size: 2 MB 
$count = 0; // set your counter here 
if($_FILES['uploaded_file']['size'] >= $maxsize){ 
    //file larger than allowed 
    //your rest of the code 

} else{ 

    mail($strTo,$strSubject,null,$strHeader); 
    $count = 1; //send mail and increment counter 

} 
if($count > 0) 
{ 
    echo "Mail send completed."; 
} 
else 
{ 
    echo "Cannot send mail."; 
} 
?> 
+0

而不僅僅是這樣:echo「File is too large!」; 我該如何阻止表單被髮送? – user2347566 2013-05-03 16:48:32

+0

試試上面的代碼..它會工作..在這裏,我做的是我把郵件功能,如果條件。 – 2013-05-05 16:47:38