Привет всем Я нашел действительно хороший код на http://apptools.com, который помог мне создать форму, которая позволяет пользователям вводить туда детали, загружать файл, и затем он автоматически отправляет его мне автоматически, что отлично. Я просто задавался вопросом, знаете ли вы, как я могу ограничить типы файлов документами, pdf, psd, ai, jpg, bmp и, возможно, еще немного в будущем, а также ограничить его размером до 5 МБ. Код, который у меня есть, приведен ниже:
<?php if(!isset($_POST['Submit'])){ echo "error; you need to submit the form!"; } else { $to="my@email.com"; $subject="Subject header"; $enquiry = $_POST['message2']; $company = $_POST['company2']; $tel = $_POST['tel2']; $client = $_POST['fromname']; $clientemail = $_POST['fromemail']; $from = stripslashes($_POST['fromname'])."<".stripslashes($_POST['fromemail']).">"; $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; $headers = "From: $from\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: multipart/mixed;\r\n" . " boundary=\"{$mime_boundary}\""; $message="Email from $fromname on Contact form.\n\n Details are as follows:\n Name: $client \n Company: $company \n Email: $clientemail \n Telephone: $tel \n Message: $enquiry \n". "\n Please contact them within 48 hours."; $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; foreach($_FILES as $userfile){ $tmp_name = $userfile['tmp_name']; $type = $userfile['type']; $name = $userfile['name']; $size = $userfile['size']; if (file_exists($tmp_name)){ if(is_uploaded_file($tmp_name)){ $file = fopen($tmp_name,'rb'); $data = fread($file,filesize($tmp_name)); fclose($file); $data = chunk_split(base64_encode($data)); } $message .= "--{$mime_boundary}\n" . "Content-Type: {$type};\n" . " name=\"{$name}\"\n" . "Content-Disposition: attachment;\n" . " filename=\"{$fileatt_name}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; } } $message.="--{$mime_boundary}--\n"; if (@mail($to, $subject, $message, $headers)) echo "Message Sent"; else echo "Failed to send"; } ?>
Любая помощь будет большой.
Вы можете ограничить размер загрузки в php.ini ( здесь ), и вы можете проверить расширение имени загруженного файла, чтобы убедиться, что это приемлемый формат (не проверенный код):
$okExtensions = array('jpg', 'png'); $fileName = 'test.doc'; $fileParts = explode('.', $fileName); if( in_array( strtolower( end($fileParts) ), $okExtensions) ) { // proceed }