2013-05-03 99 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