ประเภทไฟล์แนบ PHPMailer และขีดจำกัดขนาด

ฉันมีแบบฟอร์มเดียวและฉันใช้ PHPMailer เพื่อส่งข้อมูลจากแบบฟอร์มนั้นไปยังอีเมลของฉัน ผู้ใช้สามารถส่งไฟล์แนบได้เช่นกัน แต่ฉันมีหนึ่งปัญหา: จะทำให้ PHPMailer ปฏิเสธไฟล์แนบที่มีขนาดใหญ่กว่า 2Mb ได้อย่างไร และอนุญาตเฉพาะไฟล์แนบ 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);
}

แก้ไข: 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 หากเป็น ไม่ใช่รูปภาพ มิฉะนั้นจะส่งคืนอาร์เรย์ข้อมูลรวมถึงประเภท mime (หากคุณไม่ต้องการตรวจสอบประเภทรูปภาพที่เฉพาะเจาะจง)

person Community    schedule 08.06.2012