簡體   English   中英

PHPMailer清理多個附件

[英]PHPMailer sanitizing multiple attachments

我試圖限制文件大小和phpmailer處理的附件類型。 這篇文章中的答案不能解決多個附件的問題。 問題似乎是帶有[]的表單輸入名稱,該名稱將表單輸入轉換為數組。 我無法編寫正確的語法。

HTML是:

<input type="file" multiple="multiple" name="attach_file[]" />

PHP是:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'src/Exception.php';
require 'src/PHPMailer.php';

$name = $_POST['name'];

$mail = new PHPMailer(true);

try {

    $mail->setFrom('abc@abc.org', 'abc');
    $mail->addAddress('xyz@xyz.com', 'xyz');              

    // Attachments

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

   $source = $_FILES['attach_file']['tmp_name'][$key]; 
   $filename = $_FILES['attach_file']['name'][$key]; 
$mail->AddAttachment($source, $filename);
}

    $mail->isHTML(true); 

    $mail->Subject = 'Case History';

    $mail->Body = $name;

    $mail->send();
    echo 'Message has been sent';

} 

catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

如果在foreach循環中,我將使用以下代碼:

$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);
}

我得到這些錯誤:

  1. filesize():統計信息失敗
  2. mime_content_type():無法打開流。
  3. 沒有相應的文件和目錄

輸入名稱用於多個附件時,寫入IF條件的正確方法是什么。 謝謝。

您應該注意, $filename只是已上傳文件的原始名稱(例如photo.jpg )-但已上傳文件的文件系統路徑名實際上是$source (始終是一些隨機文件名,位於OS temp文件夾中) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM