检查文件而不仅仅是扩展PHP

时间:2015-02-01 01:18:08

标签: php upload

我环顾四周,但找不到任何有关我问题的具体信息。

我使用jquery.validate检查上传文件的扩展名是否正确。我也尝试过Jquery的Mime式检查。

两种方式只检查扩展名。我可以创建一个文本文件,将扩展名重命名为pdf或word,然后文件将通过。当然文件已损坏。

有没有办法真正的PHP,我可以检查文件本身,而不仅仅是扩展名?这是我到目前为止所得到的:

<?php

require_once '../lib/PHPMailer/PHPMailerAutoload.php';

function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}


if(isset($_POST['email'])) {

    $geslacht = $_POST['title'];
    $first_name = $_POST['first_name']; // required
    $last_name = $_POST['last_name']; // required
    $email_from = $_POST['email']; // required
    $telephone = $_POST['telephone']; // not required
    $comments = $_POST['comments']; // required


        $d='C:/wamp/www//upload/';
        $de=$d . basename($_FILES['bestand']['name']);
    if (move_uploaded_file($_FILES["bestand"]["tmp_name"], $de)) {

    }else {

         echo "<script>alert('Bestand kon niet worden geupload')</script>";
    };
$fileName = $_FILES['bestand']['name'];
    $filePath = $_FILES['bestand']['tmp_name'];
     //add only if the file is an upload

  }
else
  {

  }


$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPDebug = 2;

$mail->Host = '';
$mail->Username ='';
$mail->Password = '';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;


$mail->From = ';
$mail->FromName = "$geslacht $first_name $last_name";
$mail->AddAddress('', '');
$mail->Subject = "Sollicitatie van $geslacht $first_name $last_name";
$mail->Body = "$geslacht $first_name $last_name heeft zijn/haar CV Gestuurd! Klik op bijlage om te bekijken. Het email adres van deze persoon is $email_from";
$mail->AddAttachment($de, $_FILES['bestand']['name']);
 var_dump($mail->Send());

有什么建议吗? 谢谢你们!

1 个答案:

答案 0 :(得分:0)

你应该使用finfo_file函数,在这里阅读更多相关信息:  http://php.net/manual/en/function.finfo-file.php

此函数按其内容返回有关文件的信息,无论扩展名如何。

你可以这样使用它:

<?php
    $finfo = new finfo(FILEINFO_MIME);
    echo $finfo->file("<file_path>"); //outputs file type
?>

希望有所帮助。