仅.txt .doc .docx设置附件文件格式


Make Attachment File Format only .txt .doc .docx

我创建了一个带有文件附件的PHP联系表单,并帮助在线教程。但是我想像用户只上传.txt .doc .docx文件格式一样运行它,不接受其他格式。

<?php
$from = "name@example.com";
$to = $_POST['email'];
$subject =$_POST['subject'];
$message = $_POST['body'];
// Temporary paths of selected files
$file1 = $_FILES['file1']['tmp_name'];
$file2 = $_FILES['file2']['tmp_name'];
$file3 = $_FILES['file3']['tmp_name'];
// File names of selected files
$filename1 = $_FILES['file1']['name'];
$filename2 = $_FILES['file2']['name'];
$filename3 = $_FILES['file3']['name'];
// array of filenames to be as attachments
$files = array($file1, $file2, $file3);
$filenames = array($filename1, $filename2, $filename3);
// include the from email in the headers
$headers = "From: $from";
// boundary
$time = md5(time());
$boundary = "==Multipart_Boundary_x{$time}x";
// headers used for send attachment with email
$headers .= "'nMIME-Version: 1.0'n" . "Content-Type: multipart/mixed;'n" . " boundary='"{$boundary}'"";
// multipart boundary
$message = "--{$boundary}'n" . "Content-Type: text/plain; charset='"iso-8859-1'"'n" . "Content-Transfer-Encoding: 7bit'n'n" . $message . "'n'n";
$message .= "--{$boundary}'n";
// attach the attachments to the message
for($x=0; $x<count($files); $x++){
    $file = fopen($files[$x],"r");
    $content = fread($file,filesize($files[$x]));
    fclose($file);
    $content = chunk_split(base64_encode($content));
    $message .= "Content-Type: {'"application/octet-stream'"};'n" . " name='"$files[$x]'"'n" .
        "Content-Disposition: attachment;'n" . " filename='"$filenames[$x]'"'n" .
        "Content-Transfer-Encoding: base64'n'n" . $content . "'n'n";
    $message .= "--{$boundary}'n";
}
// sending mail
$sendmail = mail($to, $subject, $message, $headers);
// verify if mail is sent or not
if ($sendmail) {
    echo "Sent successfully!";
} else {
    echo "Error occurred. Try again!";
}
?>

建议使用 $_FILE["文件名"]["类型"] 进行文件类型检查,因为类型参数是特定于浏览器的,即不同的浏览器可以有不同的类型 因此,我们将尝试从字符串函数中提取格式

$filename=$_FILES["file1"]["name"];//get the name of the file
$extension=strrchr($filename, ".");//extracting the extension
if($extension=".txt" || $extension=".doc" || $extension=".docx")
{
//send mail;
}
else
{
//error;
}

简单地说,

$filename_array = explode(".",$filename);
$ext = ".".$filename_array[count($filename_array)-1];
if($ext!==".txt" && $ext!==".doc" && $ext!==".docx"):
    //Do bad extension code
endif;
//Do code that passed extension validation

希望这有帮助!

$allowed = array('.txt', '.doc', '.docx')
$fileNames = array();
$filename1= $_FILES['file1']['name'];
$ext1 = pathinfo($path, PATHINFO_EXTENSION);
if(in_array($ext1, $allowed)){
   array_push($fileNames, $filename1);  //repeat for 2, 3, etc...
}
function allowed_file(){
    //Add the allowed mime-type files to an 'allowed' array 
    $allowed = array('application/doc', 'application/txt', 'another/type');
   //Check uploaded file type is in the above array (therefore valid)  
    if(in_array($_FILES['file']['name'], $allowed))
         {
         // Your code
          }
}

参考 : php文件上传,如何限制文件上传类型