如何检查上传的文件

时间:2016-05-09 15:10:02

标签: php

我是PHP的新手,我想在将文件上传到PhpMyAdmin之前检查该文件。我想添加到我的数据库的唯一文件类型是PDF,DOC和DOCX。我已经在互联网上查询了解决方案,但我真的找不到任何解决方案。我希望你们可以帮助我。

<?php
$servername = "localhost";
$username = "root";
$password = "usbw";
$dbname = "persons";

// CREATE A CONNECTION WITH THE DATABASE
// CONNECTIE MAKEN MET DATABASE
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 

// CHECK IF SUBMIT IS CLICKED
// CONTROLEER OF SUBMIT IS GEKLIKT
if(isset($_POST['submit']))
{
$filetmp = $_FILES["cv"]["tmp_name"];
$filename = $_FILES["cv"]["name"];
$filetype = $_FILES["cv"]["type"];
$filepath = "files/".$filename;

move_uploaded_file($filetmp,$filepath);


// INSERT VALUES IN THE DATABASE
// VOEG WAARDES TOE IN DE DATABASE
$sql = "INSERT INTO cv (cv_name,cv_path,cv_type) VALUES ('$filename','$filepath','$filetype')";
$result = mysqli_query($conn, $sql);
}
// INSERT cv_id IN person_id
// VOEG cv_id TOE IN person_id
$cv = $conn->insert_id;
?>

1 个答案:

答案 0 :(得分:0)

您可以使用is_uploaded_file():

if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) {
    echo 'No upload';
}

来自docs:如果文件名为:

,则返回TRUE
  

文件名是通过HTTP POST上传的。这有助于确保   恶意用户没有试图欺骗脚本进行操作   它不应该工作的文件 - 例如/ etc / passwd。

     

如果有任何机会,这种检查尤其重要   任何完成上传文件的内容都可以将其内容透露给   用户,甚至是同一系统上的其他用户。编辑:我正在使用这个   在我的FileUpload类中,如果它有帮助:

public function fileUploaded()
{
    if(empty($_FILES)) {
        return false;       
    } 
    $this->file = $_FILES[$this->formField];
    if(!file_exists($this->file['tmp_name']) || !is_uploaded_file($this->file['tmp_name'])){
        $this->errors['FileNotExists'] = true;
        return false;
    }   
    return true;
}