仅制作附件文件格式.txt .doc .docx

时间:2013-10-15 18:29:02

标签: php phpmailer

我创建了一个带有文件附件的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!";
}
?>

4 个答案:

答案 0 :(得分:1)

简单地说,

$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

希望这有帮助!

答案 1 :(得分:1)

$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...
}

答案 2 :(得分:1)

$ _FILE [“filename”] [“type”]的使用不建议用于文件类型检查,因为类型参数是浏览器特定的,即不同的浏览器可以有不同的类型所以我们将尝试从字符串中提取格式功能

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

答案 3 :(得分:-1)

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 file upload, how to restrict file upload type