Смотрите здесь, как сначала обработать загрузку файлов:
Обработка загрузки файлов
Вам необходимо обратиться к временному имени файла. Это необходимо для получения фактического имени файла, а не только имени файла.
$_FILES['userfile']['tmp_name']
Таким образом, введите $_FILES['userfile']['name']
для письменного имени файла вложения и $_FILES['userfile']['tmp_name']
, чтобы указать фактический файл (данные) загрузки.
Грубо говоря, введите в свой код вкл. проверку , которую вы также должны сделать, чтобы убедиться, что это на самом деле загрузка файла:
for ($i = 0; $i <= 2; $i++)
{
# ignore file that have not been uploaded
if (empty($_FILES['uploaded'.$i])) continue;
# get the data of the file
$fileName = $_FILES['uploaded'.$i]['name'];
$filePath = $_FILES['uploaded'.$i]['tmpname'];
# add only if the file is an upload
is_uploaded_file($filePath)
&& $mail->AddAttachment($filePath, $fileName)
;
}
Слово предостережения
Ваш код смешивает две работы друг с другом. Это затрудняет вам отладку и улучшение, а также заботится о таких вещах, как проблемы с файлами / системой и безопасность.
Я предлагаю вам немного другой подход: делайте один шаг за другим. В вашем случае, а именно: 1) обработайте загрузки файла и соберите необходимые данные, 2) добавьте эти вложения.
Вы можете улучшить первую часть, заглянув в руководство по PHP. Если вы хотите поддержать загрузку нескольких файлов, я предлагаю вам ориентироваться на предложения, приведенные на странице Загрузка нескольких файлов . Затем обработайте загрузку файла и сформируйте массив, содержащий имя файла на клиентском компьютере и путь в системе сервера для каждой записи.
// see PHP Manual for multi file uploads, this is based on it
$validAttachments = array();
foreach($_FILES['userfile']['name'] as $index => $fileName)
{
$filePath = $_FILES['userfile']['tmp_name'][$index];
if(is_uploaded_file($filePath))
{
$attachment = new stdClass;
$attachment->fileName = $fileName;
$attachment->filePath = $filePath;
$validAttachments[] = $attachment;
}
}
Если в этой части уже есть ошибка, вы знаете, что она связана с процедурой загрузки файла. Это непроверенный код, поэтому просто иллюстрируем направление.
На втором шаге вы можете просто перебрать такой массив и добавить вложения:
foreach($validAttachments as $attachment)
{
$mail->AddAttachment($attachment->filePath, $attachment->fileName);
}
После этого вы можете лучше проверить ошибки в разных частях, не смешивая одну проблему с другой.