Jenis lampiran PHPMailer dan batas ukuran

saya punya satu formulir dan saya menggunakan PHPMailer untuk mengirim data dari formulir itu ke email saya. Pengguna juga dapat mengirim lampiran, tetapi saya punya satu masalah: bagaimana cara membuat PHPMailer menolak lampiran yang lebih besar dari 2Mb dan hanya mengizinkan lampiran iamge (tidak ada jenis dokumen lain)?

Ini adalah kode yang saya gunakan untuk memperbanyak lampiran email dengan 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 sumber


Jawaban (2)


Anda dapat memeriksa ukuran file menggunakan filesize() dan jenisnya menggunakan mime_content_type().

kode yang dihasilkan akan terlihat seperti:

$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 tidak memiliki kemungkinan bawaan untuk kesalahan tersebut - seperti yang Anda lihat dari sumbernya, PHPMailer hanya memeriksa apakah file tersebut ada saat menambahkan lampiran:

if ( !@is_file($path) ) {
  throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE);
}
person oezi    schedule 08.06.2012
comment
Ya, saya ingin melakukan hal seperti itu, tetapi saya bertanya-tanya apakah ada fungsi PHPMailer bawaan untuk melakukan ini? Tapi mungkin tidak, saya mencoba menemukannya di situs... - person SomeoneS; 08.06.2012

Gunakan filesize() untuk memeriksa ukuran file. Untuk memeriksa apakah file tersebut adalah gambar, gunakan getimagesize() yang mengembalikan false jika itu bukan gambar, jika tidak maka akan mengembalikan serangkaian info termasuk mimetype (jika Anda tidak ingin memeriksa jenis gambar tertentu).

person Community    schedule 08.06.2012