我有以下代码来保存附件并通过电子邮件发送(PHP Mailer)。
$filedata['name'] = $_FILES['userfile']['name'][$i];
$path = "files/".md5($i.$filedata['name'].time()).".".pathinfo($_FILES['userfile']['name'][$i], PATHINFO_EXTENSION);
move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path);
$mail->AddAttachment( $path, $filedata['name']);
问题是,邮件有时并非总是在没有附件的情况下发送(但是,文件已上传)。我想,问题发生在move_uploaded_file
,因为电子邮件是在文件移动之前发送的。
是否会使用某种回调?
答案 0 :(得分:1)
if(move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path)){
$mail->AddAttachment( $path, $filedata['name']);
}
你可以使用它。
答案 1 :(得分:1)
您需要先检查附件是否成功上传
if (move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path)) {
$mail->AddAttachment($path, $filedata['name']);
}
else {
echo "Upload failed";
}
编辑:
或者您可以尝试捕捉错误
try {
/*
*
* Your mail code here
* ..........
*/
move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path);
$mail->AddAttachment($path, $filedata['name']);
$mail->Send();
} catch (phpmailerException $e) {
echo $e->errorMessage(); // Error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); // Error messages from anything else!
}
答案 2 :(得分:0)
将邮件功能放在if条件中:
if(move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path)){
$mail->AddAttachment( $path, $filedata['name']);
}
在发送邮件之前,我们应先检查是否已上传。