我使用以下代码来确保附件是jpg,png,pdf并且大小低于1mb。如果文件大小超过1mb,则以下代码显示“invalid file”但它只发送所有文件。如果附件不是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,为什么此代码不限制邮件?
表单uploding字段部分是:
<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>
答案 0 :(得分: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。这是相互排斥的。
此外,您没有根据错误是否已设置发送电子邮件,因此无论如何都会发送电子邮件。