Добавление нескольких вложений в PHPMailer

Я пытаюсь прикрепить несколько изображений в приложениях. Я использовал forearch для каждого вложения, но, когда я использую foreach, у меня нет имени и имени пользователя, я, вероятно, что-то делаю не так. Ниже приведен код и ошибки:

Введите HTML

<input id="upload-file" class="upload-file" type="file" name="upload-file[]">

var_dump из $ _FILES [‘upload-file’]:

array(5) { ["name"]=> array(1) { [0]=> string(47) "WRANGLER_AW13_GIRLONTOP_A4_LANDSCAPE_300dpi.jpg" } ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } ["tmp_name"]=> array(1) { [0]=> string(24) "C:\xampp\tmp\php41DC.tmp" } ["error"]=> array(1) { [0]=> int(0) } ["size"]=> array(1) { [0]=> int(91742) } }

var_dump для имени и временного имени:

Notice: Undefined index: name in C:\xampp\htdocs\hmg\process-email.php on line 66

Notice: Undefined index: tmp_name in C:\xampp\htdocs\hmg\process-email.php on line 67

NULL
NULL

КОД:

foreach($_FILES['upload-file'] as $file) {

$name = $file['name'];
$path = $file['tmp_name'];
var_dump($name);
var_dump($path);

//And attach it using attachment method of PHPmailer.

$mail->addattachment($path,$name);
}

6

Решение

Добро пожаловать на злую сторону PHP. $_FILES это не то, что разработчик может ожидать.

//wrong code
$img1 = $_FILES['upload-file'][0]['tmp_name'];
$img2 = $_FILES['upload-file'][1]['tmp_name'];

//working code
$img1 = $_FILES['upload-file']['tmp_name'][0];
$img2 = $_FILES['upload-file']['tmp_name'][1];

Так что вам нужно что-то вроде

$totalFiles = count($_FILES['upload-file']['tmp_name']);
for ($i = 0; $i < $totalFiles; $i++) {
$name = $_FILES['upload-file']['name'][$i];
$path = $_FILES['upload-file']['tmp_name'][$i];
$mail->addattachment($path,$name);
}

Вот какой-то пример из репозитория PHPMailer.

6

Другие решения

Спасибо за ответы на все вопросы. Я уверен, что все ваши подходы будут работать просто отлично, но я решил решить это сам. Этот код решил проблему

$validAttachments = array();

foreach($_FILES['upload-file']['name'] as $index => $fileName) {
$filePath = $_FILES['upload-file']['tmp_name'][$index];
$validAttachments[] = array($filePath, $fileName);
}

foreach($validAttachments as $attachment) {
$mail->AddAttachment($attachment[0], $attachment[1]);
}

Я надеюсь, что любой, у кого такая же проблема, получит некоторую помощь здесь …

2

$i = '0';
foreach($_FILES['upload-file'] as $file) {
$name = $file['name'][$i];
$path = $file['tmp_name'][$i];
var_dump($name);
var_dump($path);
$mail->addattachment($path,$name);
$i++;
}
0

Большинство решений здесь основаны на формах.

Поэтому я пришел к простому решению, если вы хотите прикрепить все файлы из определенного каталога.

$file_to_attach_directory = 'files/';
if ($handle = opendir($file_to_attach_directory)) {
try {
while (false !== ($entry = readdir($handle))) {
$attachment_location = $file_to_attach_directory. $entry;
$mail->addAttachment($attachment_location);
}
closedir($handle);
// Send Mail
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
} catch (Exception $e) {
var_dump($e);
}
}
0
По вопросам рекламы [email protected]