Я не уверен, что я делаю неправильно здесь. Мои заявления, если Арент работает, его, как оно не признает любой тип файла на все .....Загрузка файла PHP, разрешающая только указанные расширения
$file_name = validateInput($_FILES['file']['name']);
$temp_name = validateInput($_FILES['file']['tmp_name']);
$file_type = $_FILES['file']['type'];
//get file extension
$base = basename($file_name);
$extension = substr($base, strlen($base)-4, strlen($base));
//allowed file types
$allowed_extensions = array(".doc", "docx", ".pdf", ".png");
//check if attachment exist
if(!empty($_FILES['file']['name'])){
function validateInput($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$file_name = validateInput($_FILES['file']['name']);
$temp_name = validateInput($_FILES['file']['tmp_name']);
$file_type = $_FILES['file']['type'];
//get file extension
$base = basename($file_name);
$extension = substr($base, strlen($base)-4, strlen($base));
//allowed file types
$allowed_extensions = array(".doc", "docx", ".pdf", ".png");
//check if uploaded file is allowed
if(in_array($extension, $allowed_extensions)){
//email essentials
//$from = $email_address;
$to = '[email protected]';
$subject = 'Applicant Application - '.$query;
$message = $html_email;
//handling the file
$file = $temp_name;
$content = chunk_split(base64_encode(file_get_contents($file)));
$uid = md5(uniqid(time()));
//standard mail headers
$headers = "From: ".$forenames." ".$surname."\r\n";
//$headers = "Reply-To: $to \r\n";
$headers .= "MIME-Version: 1.0\r\n";
//declaring that we have muliple kinds of email(i.e content and attachment)
$headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$headers .= "This is a multi-part message in MIME format.\r\n";
//plain text or html part
$headers .= "--".$uid."\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$headers .= $message."\r\n\r\n";
//attachment part
$headers .= "--".$uid."\r\n";
$headers .= "Content-type: ".$file_type."; name=\"".$file_name."\"\r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; filename=\"".$file_name."\"\r\n\r\n";
$headers .= $content."\r\n\r\n";
//send the mail(without message, as msg is already in header)
if(mail($to, $subject, "", $headers)){
$success = true;
} else {
echo "<script>
alert('Failed to send the message. File type not allowed');
</script>";
}
} else {
echo "<script>
alert('Failed to send the message. File type not allowed');
</script>";
}
}//attachment check
Я также хотел бы знать, лучший способ ограничения размера файла.
Спасибо,
Wale
У вас есть много условий 'if'. Какой из них не работает? – Chayan
Для получения расширений файлов используйте $ current_ext = preg_replace ("/.*\.([^.]+)$/", "\\ 1", $ filename); –
Лучшими способами получить расширение файла является использование функции pathinfo или объекта spifileinfo, регулярное выражение не является чем-то, что я советую использовать для получения расширения –