Отправлять файлы с помощью phpmailer перед их загрузкой?


У меня есть проблема с отправкой писем с вложением скриптом 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>
1 2

1 ответ:

Решение моей проблемы основано на идее из 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;}

Спасибо за вашу помощь!