Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的扩展验证_Php_File Upload - Fatal编程技术网

php中的扩展验证

php中的扩展验证,php,file-upload,Php,File Upload,我一直在反复尝试这段代码,试图获取文件扩展名并有条件地检查它,但由于文件在流中的位置,我看不到$ext中的内容 有人能指出这里出了什么问题吗?它只是操纵dropzone.js的上传文件 if (!empty($_FILES)) { $tempFile = $_FILES['file']['tmp_name']; //3 $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $

我一直在反复尝试这段代码,试图获取文件扩展名并有条件地检查它,但由于文件在流中的位置,我看不到$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
    }

}
if(!空($\u文件)){
$tempFile=$\u FILES['file']['tmp\u name'];//3
$targetPath=dirname(_文件).$ds.$storeFolder.$ds;//4
$targetFile=$targetPath.$_FILES['file']['name'];//5
$ext=end(分解(“.”,$\u文件['file']['tmp\u名称]]);
如果(文件大小($tempFile)<6000000和$ext==“png”){
移动上传的文件($tempFile,$targetFile);//6
}
}

您正在使用tmp\u 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>
$file\u type=mime\u content\u type($\u FILES['img']['tmp\u name']);
如果($file_type=='text/plain'){
echo“文件类型为文本”;
}
?>

我不知道你所说的“由于文件在流中的位置”是什么意思。不要把这一切都建立在文件扩展名的基础上。我可以将一个php文件重命名为png,上传它,然后可能从上传目录运行它。找出mimetype,然后使用它进行验证。您还可以使用$ext=pathinfo($\u FILES['file\u name']['name'],pathinfo\u扩展名)查找文件扩展名;