У меня есть одна форма, и я использую PHPMailer для отправки данных из этой формы в электронную почту. Пользователи также могут отправлять вложения, но у меня есть один rpoblem: как заставить 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); }
вы можете проверить размер файла с помощью 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 не имеет встроенной возможности для этих chacks – как вы можете видеть из источника, он проверяет, существует ли файл при добавлении вложения:
if ( !@is_file($path) ) { throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE); }
Используйте файлizeize () для проверки размера файла. Для проверки того, является ли файл изображением, используйте getimagesize (), который возвращает false, если это не изображение, иначе он вернет массив информации, включая mimetype (если вы не хотите проверять конкретные типы изображений).