php过滤上传类型,只上传图片类型文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php过滤上传类型,只上传图片类型文件相关的知识,希望对你有一定的参考价值。

php源码

http://116.254.208.48/2.txt

怎样来过滤上传类型?
代码怎样改
没有判断文件类型 没有过滤类型 可以上传任何文件
我只要上传jpg、jpeg、gif、png的图片

你可以这样,如果说你的上传文件文件名是$uploadfilename,那么可以用
$str = end(explode(".",$uploadfilename));获得上传文件的扩展名,然后再进行判断if($str=="jpg" or $str=="jpeg" or $str=="gif" or $str=="png")的时候才执行上传,否则返回错误提示信息,这样子来限制上传文件类型
参考技术A <?php
header('Content-Type:text/html; charset=utf-8');
require('inc/function.inc.php');
$path = pathinfo($_FILES['filename']['name']);
$uploadfilename = makeuploaddirname('/uploadfile') . makeuploadfilename() . '.' . $path['extension'];

$types=array("image/jpg","image/jpeg","image/gif","image/png");
if (in_array($_FILES['filename']['type'],$types))
if(move_uploaded_file($_FILES['filename']['tmp_name'], realpath("../") . $uploadfilename))
$picname = $_POST['picname'];
if( ('#special#' != $picname))

echo "<script language='javascript'>alert('文件上传成功!');window.parent.document.getElementById('$picname').value='", substr($uploadfilename,0), "';window.parent.closePopupDiv();</script>";

else

echo "<script language='javascript'>alert('文件上传成功!');obj=window.parent.opener;obj.insertRow(obj.document.getElementById('mytable'),'$uploadfilename');window.close();</script>";


else
echo '<script language="javascript">alert("文件上传失败!");</script>';

else
echo "不接受的格式";

?>
参考技术B 用swfupload吧,可以省很多事,支持多文件,支持进度条,支持缩略图。

文件上传图片

通过 PHP,可以把文件上传到服务器。里面加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件。
为了网站的安全,肯定不让上传php文件,如果有人进入你的后台,上传了一个php文件,你的网站源码,全部救变成他的了,直接打包看你的代码。所以一定要控制上传的目录与文件类型,一般只可以上传图片。
要实现文件上传图片我们需要写出两个php文件,第一个php文件我们需要写出一个文件上传的页面,
第二个php文件我们写出实现图片上传的功能
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 
 8 <body>
 9 
10 <h1>文件上传</h1>
11 <form action="upload.php" method="post" enctype="multipart/form-data">
12    <input type="file" name="file" />
13     <input type="submit" value="上传" />
14 </form>
15 </body>
16 </html>

 1 <?php
 2 var_dump($_FILES["file"]);
 3 
 4 限制文件的类型
 5 限制文件的大小
 6 防止文件名重复
 7    
 8     一.防止文件名重复
 9    1.修改文件名
10    流水号,时间戳+随机数+用户名
11 
12    2.建文件夹
13    upload/20170317/lch/shangchuan/11.jpg
14 
15    3.保存文件
16 
17 if($_FILES["file"]["error"])
18 {
19    echo $_FILES["file"]["error"];
20 }
21 else
22 {
23    没有出错
24    
25     加限制条件
26    if(($_FILES["file"]["type"]=="image/png" || $_FILES["file"]["type"]=="image/jpeg") && $_FILES["file"]["size"]<1024000)
27    {
28       
29       防止文件名重复
30       $filename = "./img/".time().$_FILES["file"]["name"];
31       
32     转码
33       $filename = iconv("UTF-8","gb2312",$filename);
34       
35       
36     if(file_exists($filename))
37       {
38          echo "该文件已存在";
39       }
40       else
41       {
42          保存文件
43          move_uploaded_file($_FILES["file"]["tmp_name"],$filename);
44       }
45    }
46    else
47    {
48       echo "文件类型不对";
49    }
50 }

注释:对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。 
保存被上传的文件 
上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。 
这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置: 

 上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。

以上是关于php过滤上传类型,只上传图片类型文件的主要内容,如果未能解决你的问题,请参考以下文章

PHP图片上传安全检查清单

百度上传控件webuploader如何限制 图片尺寸大小

突破文件上传漏洞

php文件上传漏洞代码只允许上传图片

上传图片限制大小类型判断像素判断

上传图片shell绕过过滤的几种方法