【问题标题】:attachement restriction is not working. how to solve this?附件限制不起作用。如何解决这个问题?
【发布时间】:2014-09-08 07:11:51
【问题描述】:

我正在使用以下代码来确保附件是 jpg、png、pdf 并且大小低于 1mb。如果文件大小超过 1mb,则以下代码显示“无效文件”,但它只是发送所有文件。如果附件不是 jpg、png 或 pdf,则不会显示错误消息。

$attachments = array(WP_CONTENT_DIR ."/uploads/".$_FILES["attachment"]["name"]);
$allowedExts = array("pdf", "jpg", "png");

        $temp = explode(".", $_FILES["attachment"]["name"]);
        $extension = end($temp);

        if ((($_FILES["file"]["type"] != "image/pdf")
        && ($_FILES["file"]["type"] != "image/jpg")
        && ($_FILES["file"]["type"] != "image/png"))
        && ($_FILES["file"]["size"] > 1000000)
        && in_array($extension, $allowedExts)) {
                $errors['attachment'] = "invalid file!";
        }
        $headers = array('From: '.$_POST['sendername'].' <'.$_POST['senderEmail'].'>');                  
        $mail_sent = wp_mail( $to, $subject, $mailBody, $headers, $attachments );

如果附件不是 jpg、png 或 pdf,为什么这段代码不限制邮件?

表单上传字段部分为:

<form action="">
    <label for='uploaded_file'>Select A File To Upload:</label>
    <input type="file" name="attachment">
    <?php if(isset($errors['attachment'])) { echo '<span style="color: red">'.$errors['attachment'].'</span>'; } ?>

    <input type="submit" value="Submit" name="submit">
</form>

【问题讨论】:

  • 信息太少了。您必须粘贴进行真正发送的代码。这里唯一可见的是你设置了一个变量 $errors,后面不知道什么依赖于这个变量。
  • @klarki 请看看我更新的代码。

标签: forms email attachment


【解决方案1】:

代码应该是:

    if ((($_FILES["file"]["type"] != "image/pdf")
         && ($_FILES["file"]["type"] != "image/jpg")
         && ($_FILES["file"]["type"] != "image/png"))
    || ($_FILES["file"]["size"] > 1000000)
    || !in_array($extension, $allowedExts)) {
            $errors['attachment'] = "invalid file!";
    } else {
        $headers = array('From: '.$_POST['sendername'].' <'.$_POST['senderEmail'].'>');                  
        $mail_sent = wp_mail( $to, $subject, $mailBody, $headers, $attachments );
    }

在您的原始代码中,每个条件都必须为真,但情况并非如此:文件既不能是 pdf、jpg 也不能是 png,而同时扩展名必须是 pdf jpg 或 png。那是相互排斥的。

此外,您没有根据是否设置错误来执行发送电子邮件的操作,因此无论如何都会发送电子邮件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多