我想為每個檔案創建 php 檔案大小驗證。我使用for回圈添加附件,然后創建條件來檢查檔案,但它不起作用。沒有錯誤,但它發送帶有超大附件的郵件,而不是停止。如果沒有大小驗證部分,它可以毫無問題地發送郵件。
對于發送,我使用了 php mailer。
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
//Load Composer's autoloader
require 'autoload.php';
//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);
$honeypot = $_POST['honey'];
$user_name = $_POST['name'];
$user_email = $_POST['email'];
$user_message = $_POST['message'];
$user_phone = $_POST['phone'];
$honeypot = trim($_POST["honey"]);
$max_size = 2 * 1024 * 1204; //2mb
$attachment = $_FILES['uploaded-file'];
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if(!empty($honeypot)) {
echo "NO SPAM!";
exit;
} else {
$mail = new PHPMailer; //From email address and name
$mail->isMail();
$mail->From = $user_email;
$mail->addAddress("[email protected]");
$mail->isHTML(true);
$mail->Subject = "Zapytanie ze strony www";
$mail->Body = "Telefon:$user_phone<br><br>Tre?? wiadomo??i:<br>$user_message";
$mail->AltBody = "Telefon:$user_phone\n$content";
if(isset($attachment)) {
for ($i = 0; $i < count($_FILES['uploaded-file']['name']); $i ) {
if ($_FILES['uploaded-file']['error'] !== UPLOAD_ERR_OK) continue;
$file_TmpName = $_FILES['uploaded-file']["tmp_name"][$i];
$file_name = $_FILES['uploaded-file']["name"][$i];
if($_FILES['uploaded-file']["name"][$i]; > $max_size) {
echo "file is too big";
die();
}
else{
move_uploaded_file($fileTmpName, "uploads/" . $filename);
$mail-> AddAttachment("uploads/". $filename);
}
}//for
}//isset
if(!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
exit();
}
else {
header("Location: sent.html");
exit();
}//if send else
}//honey else end
}//post end
我已經重新構建了我的代碼,并且還遵守了評論/線索。
但仍然存在同樣的問題。
uj5u.com熱心網友回復:
這是復制粘貼錯誤
$_FILES['uploaded-file']["name"]['size'][$i]
根據 PHP檔案,大小是下$_FILES['uploaded-file']而不是 $_FILES['uploaded-file']['name']。請參閱@yuxufabio 的評論。
而且if (isset($attachments))支票有點奇怪。即使它是空的,它也會總是回傳一個陣列(意思是真的)。您可能的意思是表單變數本身是否已設定
if (isset($_FILES['uploaded-file'])) {
for ($i = 0; $i < count($_FILES['uploaded-file']['name']); $i ) {
最后,您應該檢查是否有錯誤,因為不能保證上傳在客戶端的故障下正常作業,例如空檔案或網路錯誤
if ($_FILES['uploaded-file']['error'][$i] !== UPLOAD_ERR_OK) continue;
...
if ($_FILES['uploaded-file']['size'][$i] > $maxsize) {
...
uj5u.com熱心網友回復:
我在這里看到的是您在檢查檔案大小之前使用了“move_upload_file”方式。這意味著檔案將在檢查檔案是否更大之前被上傳。應該是這樣的;
if( $_FILES['uploaded-file']["name"]['size'][$i] > $maxsize ) {
echo "file is too big";
die();
}else{
move_uploaded_file($fileTmpName, "uploads/" . $filename);
$mail-> AddAttachment("uploads/". $filename);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449336.html
