Тип вложения PHPMailer и ограничение размера

у меня есть одна форма, и я использую PHPMailer для отправки данных из этой формы на мою электронную почту. Пользователи также могут отправлять вложения, но у меня есть одна проблема: как заставить PHPMailer запрещать вложения размером более 2 МБ и разрешать только вложения iamge (никаких других типов документов)?

Это код, который я использую для нескольких вложений электронной почты с помощью PHPMailer:

foreach(array_keys($_FILES['fileAttach']['name']) as $key) {

   $source = $_FILES['fileAttach']['tmp_name'][$key]; 
   $filename = $_FILES['fileAttach']['name'][$key]; 

   $mail->AddAttachment($source, $filename);

}

person SomeoneS    schedule 08.06.2012    source источник


Ответы (2)


вы можете проверить размер файла с помощью filesize() и тип с помощью mime_content_type().

результирующий код может выглядеть так:

$maxsize = 2 * 1024 * 1024; // 2 MB
$types = array('image/png', 'image/jpeg', 'image/gif'); // allowed mime-types

if(filesize($filename) < $maxsize && in_array(mime_content_type($filename),$types)){
  $mail->AddAttachment($source, $filename);
}

EDIT: PHPMailer не имеет встроенной возможности для этих чеков - как вы можете видеть из исходного кода, он только проверяет, существует ли файл при добавлении вложения:

if ( !@is_file($path) ) {
  throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE);
}
person oezi    schedule 08.06.2012
comment
Да, я хотел сделать что-то подобное, но мне было интересно, есть ли какая-то встроенная функция PHPMailer для этого? Но, наверное, нет, я пытался найти его на сайте... - person SomeoneS; 08.06.2012

Используйте filesize() для проверки размера файла. Чтобы проверить, является ли файл изображением, используйте getimagesize(), который возвращает false, если он не изображение, иначе он вернет массив информации, включая mimetype (если вы не хотите проверять определенные типы изображений).

person Community    schedule 08.06.2012