-1

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

4 回答 4

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

希望这可以帮助!

于 2013-10-15T18:42:43.093 回答
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...
}
于 2013-10-15T18:44:32.957 回答
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;
}
于 2013-10-15T18:57:11.143 回答
-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文件上传,如何限制文件上传类型

于 2013-10-15T18:32:44.210 回答