【问题标题】:PHP Mailform and file attachment size limit [duplicate]PHP Mailform和文件附件大小限制[重复]
【发布时间】:2013-05-03 16:01:05
【问题描述】:

我将此代码用作邮件表单,用户可以在其中附加文件并通过电子邮件发送。我想知道我可以添加什么代码来将附件的文件大小限制为 5 MB。我正在使用此 ShotDev.Com 教程中的代码。谢谢。

            <html>
            <head>
            <title>ShotDev.Com Tutorial</title>
            </head>
            <body>
            <?
                $strTo = $_POST["txtTo"];
                    $strTo = "aziola@yahoo.com";
                $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 -->

【问题讨论】:

标签: php forms


【解决方案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)。

【讨论】:

  • 您还可以在表单中添加一个 HTML 元素,指定最大大小,但在整个文件上传之前它不会评估它,因此只能用作故障安全stackoverflow.com/questions/6327965/…
  • 仅供参考:$_FILES["fileAttach"]["size"] 中的文件大小将以字节为单位
  • 为什么太大 if($_FILES["fileAttach"]["size"]
  • 和 $_FILES['uploaded_file']['size'] 以字节为单位给出大小,你犯了一个小错误。请看我的回答
  • 而不仅仅是这样: echo "File is too large!";如何停止发送表单?
【解决方案2】:
<?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.";
}
?>

【讨论】:

  • 而不是这样: echo "File is too large!";如何停止发送表单?
  • 试试上面的代码..它会工作..我所做的就是将邮件功能置于if条件下。
猜你喜欢
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
相关资源
最近更新 更多