我在通过phpmailer脚本发送带有附件的电子邮件时遇到问题。如果我想在邮件中添加一个文件,我有一个工作代码。但当涉及到多个文件时,看起来它们甚至没有上传。
我的单个文件代码:
if (isset($_FILES['file']) &&
$_FILES['file']['error'] == UPLOAD_ERR_OK)
{
$mail->AddAttachment($_FILES['file']['tmp_name'],
$_FILES['file']['name']);
if(!$mail->Send())
{
header("Location: " . $returnErrorPage);
}
else
{
header("Location: " . $returnHomePage);
}
}
我尝试了一些代码,这些代码应该循环通过$_files中的所有文件,但没有成功。然后我测试了以下代码:
$count = count($_FILES['file']['tmp_name']);
echo $count;
则返回0。我知道$_FILES是空的,但我不知道原因。我需要缓冲文件还是类似的东西?
编辑:这是我的html代码,它将文件和其他数据发送到脚本:
<form id="form_907007" class="appnitro" method="post" action="server/phpmailer.php"
enctype="multipart/form-data">
<p>Choose data (txt, html etc.):<br>
<input name="file" type="file" size="50" maxlength="100000" multiple>
</p>
</form>
我的问题的解决方案基于Synchro的想法,先上传文件,然后发送电子邮件。
在我的html代码中,我不得不更改这一行:
<input name="file" type="file" size="50" maxlength="100000" multiple>
<input name="file[]" type="file" size="50" maxlength="100000" multiple>
重要的是要完成这一小步骤,以访问稍后要在php中上传的每个文件。
第二步是循环浏览所有文件并将它们存储在服务器上。我就是这样做的:
foreach ($_FILES["file"]["error"] as $key => $error){
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["file"]["tmp_name"][$key];
$name = $_FILES["file"]["name"][$key];
move_uploaded_file($tmp_name," server/data/$name"}
在下一步中,我检查文件是否上传成功,如果return=TRUE,我将它们作为附件添加到邮件中:
if(move_uploaded_file($tmp_name,"server/data/$name" ))
{
$mail->AddAttachment("server/data/$name");
}
如果一切顺利,我可以在之后删除文件。我已经发送了邮件:
if($mail->Send()){
foreach ($_FILES["file"]["error"] as $key => $error)
{
$name = $_FILES["file"]["name"][$key];
unlink("$name");
}
header("Location: " . $returnPage);
exit;}
谢谢你的帮助!