【问题标题】:Extension validation in phpphp中的扩展验证
【发布时间】:2015-08-31 06:52:37
【问题描述】:

我一直在尝试并重试这段代码,试图获取文件扩展名并有条件地检查它,但由于文件在流中放置,我看不到 $ext 中的内容。

谁能指出这里出了什么问题?它只是在处理 dropzone.js 的上传文件。

if (!empty($_FILES)) {

    $tempFile = $_FILES['file']['tmp_name'];          //3             

    $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;  //4

    $targetFile =  $targetPath. $_FILES['file']['name'];  //5

    $ext = end(explode(".", $_FILES['file']['tmp_name']));

    if(filesize($tempFile) < 6000000 and $ext == "png"){
        move_uploaded_file($tempFile,$targetFile); //6
    }

}

【问题讨论】:

  • 我不确定您所说的“由于文件在流中放置”是什么意思
  • 不要将这一切都基于文件扩展名。我可以将一个 php 文件重命名为 png,上传它,然后可能从您的上传目录运行它。找出 mimetype,然后使用它进行验证。 stackoverflow.com/questions/23287341/…

标签: php file-upload


【解决方案1】:

您正在使用 tmp_name 变量来获取扩展名,这将始终为您提供带有 .tmp 扩展名的文件。

代替

$ext = end(explode(".", $_FILES['file']['tmp_name']));

使用这个:

$ext = end(explode(".", $_FILES['file']['name']));

更新:- 但最好通过检查文件的 mime 时间(如 @castis 所说)来验证文件类型,因为某些用户可能会使用某些扩展名重命名其文件并上传。

以下是验证文本文件的代码示例,您可以使用类似的方法来验证图像类型。

$file_type =  mime_content_type($_FILES['img']['tmp_name']);

if($file_type == 'text/plain'){
    echo "file type is text";
}
?>

<form action="#" method="post" enctype="multipart/form-data">
  <input type="file" name="img">
  <input type="submit" value="Submit">
</form>

【讨论】:

  • 您还可以使用 $ext = pathinfo($_FILES['file_name']['name'],PATHINFO_EXTENSION); 查找文件扩展名;
猜你喜欢
  • 2017-11-13
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 2015-07-19
  • 1970-01-01
相关资源
最近更新 更多