PHP 图片文件上传实现代码

来源:互联网 发布:mm131源码 编辑:程序博客网 时间:2024/05/29 04:05
为了网站的安全,肯定不让上传php文件,如果有人进入你的后台,上传了一个php文件,你的网站源码,全部就变成他的了,直接打包看你的代码。所以一定要控制上传的目录与文件类型,一般只可以上传图片。

创建一个文件上传表单
允许用户从表单上传文件是非常有用的。
请看下面这个供上传文件的Html表单:
<html>
<body>
<form action "upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"/>
<br/>
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

请留意如下有关此表单的信息:
<form>标签的enctype属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用"multipart/form-data"。
<input>标签的type="file"属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。

创建上传脚本"upload_file.php",文件含有供上传文件的代码:
<?php
if($_FILES['file']['error']>0)
{
    echo "Error:".$_FILES['file']['error']."<br/>";
}else|{
    echo "Upload:".$_FILES['file']['name']."<br/>";
    echo "Type:".$_FILES['file']['type']."<br/>";
    echo "Size:".($_FILES['file']['size']/1024)."kb<br/>";
    echo "Stored in:".$_FILES['file']['tmp_name'];
}
?>

通过使用PHP的全局数组$_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的input name,第二个下标可以是"name","type","size","tmp_name"或"error",代码如下:
$_FILES['file']['name']-被上传文件的名称
$_FILES['file']['type']-被上传文件的类型
$_FILES['file']['size']-被上传文件的大小,以字节计
$_FILES['file']['tmp_name']-存储在服务器的文件的临时副本的名称
$_FILES['file']['error']-由文件上传导致的错误代码
这是一种非常简单的文件上传方式,基于安全方面的考虑,你应当增加有关什么用户有权上传文件的限制。
上传限制
在这个脚本中,我们增加了对文件上传的限制。用户只能上传.gif或.jpeg文件,文件大小必须小于20kb,代码如下:
<?php
if(($_FILES['file']['type']=="image/gif")||($_FILES['file']['type']=="image/jpeg")||)($_FILES['file']['type']=="image/pjpeg"))&&($_FILES['file']['size']<20000))
{
    if($_FILES['file']['error']>0)
    {
    echo "Error:".$_FILES['file']['error']."<br/>";
    }else{
    echo "Upload: ".$_FILES['file']['name']."<br/>";
    echo "Type: ".$_FILES['file']['type']."<br/>";
    echo "Size: ".($_FILES['file']['size']/1024)."kb <br/>";
    echo "Stored in: ".$_FILES['file']['tmp_name'];}
}else{
    echo "Invalid file";
}
?>

注释:对于IE,识别jpg文件的类型必须是pjpeg,对于FireFox,必须是jpeg。

上面的例子在服务器的PHP临时文件夹创建了一个被上传文件的临时副本。
这个临时的复制文件会在脚本结束时消失,要保存被上传的文件,我们需要把它拷贝到另外的位置,代码如下:

<?php
if((($_FILES['file']['type']=="image/gif")||($_FILES['file']['type']=="image/jpeg")||($_FILES['file']['type']=="image/pjpeg"))&&($_FILES['file']['size']<20000)){
    if($_FILES['file']['error']>0){
    echo "Return Code: ".$_FILES['error']."<br/>";
    }else{
    echo "Upload: ".$_FILES['file']['name']."<br/>";
    echo "Type: ".$_FILES['file']['type']."<br/>";
    echo "Size: ".($_FILES['file']['size']/1024)."kb<br/>";
    echo "Temp file: ".$_FILES['file']['tmp_name']."<br/>";
    if(file_exists("upload/".$_FILES['file']['name'])){
    echo $_FILES['file']['name']."already exists.";
    }else{
    move_uploaded_file($_FILES['file']['tmp_name'],"upload/".$_FILES['file']['name']);
    echo "Stored in: "."upload/".$_FILES['file']['name'];
    }
    }
}else
{
    echo "Invalid file";
}
原创粉丝点击