PHPMailer отправляет имя вложения, а не вложение


Привет, у меня есть поле для загрузки файла с именем="файл1" и кодом в скрипте phpmailer:

if (isset($_FILES['file1']))
{
$file1_path = $_FILES['file1']['tmp_name'];
$file1_name = $_FILES['file1']['name'];
$file1_type = $_FILES['file1']['type'];
$file1_error = $_FILES['file1']['error'];
$mail->AddAttachment($file1_path);
}

И по какой-то причине он прикреплен, как php45we34 (каждый раз, когда разница, кажется, что это путь к временному имени, а не фактический файл)

Есть какая-нибудь помощь?

Author: Jonah Katz, 0000-00-00

3 answers

Я предлагаю вам использовать функцию move_uploaded_file перед добавлением вложения.

Это пример кода, который переместит файл из временного расположения где-нибудь на вашем сервере

$target_path = "uploads/";

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']). 
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}

После этого добавление должно работать нормально.

$mail->AddAttachment(basename($target_path . $_FILES['uploadedfile']['name']));
 1
Author: Norbert Orzechowicz, 2011-07-14 20:05:23

Удалите пробелы из вашего имени файла!

Blue hills.jpg должно быть Blue_hills.jpg

Сделай

$fileName = str_replace(' ', '_', $fileName);

 2
Author: kzpm, 2012-11-06 02:59:57

То, что вы видите, - это то, что должно произойти. Вы не указываете имя вложения, поэтому PHPMailer использует имя временного файла, который он прикрепляет.

Если вы хотите, чтобы у файла было другое имя, вы должны указать его. Принятый ответ работает, потому что он идет наоборот - он изменяет имя файла так, чтобы файл имел желаемое имя.

Обычным способом продолжения было бы выдать

$mail->AddAttachment($file1_path, $_FILES['file1']['name']);

Для переопределения имени вложения.

 1
Author: LSerni, 2012-11-06 03:07:50