首页 > 技术文章 > 文件上传及存储

yongjiapei 2016-06-30 21:01 原文

使用form表单提交例如:
<form action="chuli.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="上传" />
</form>
 
在处理页面不使用post,使用$_FILES[],返回的是一个数组,具体信息如下:
var_dump($_FILES["file"]);
array(size=5)
  'name' =>
string
'Lenovo_SF.jpg'(length=13)
  'type' =>
string
'image/jpeg'(length=10)
  'tmp_name' =>
string
'D:\Program Files\MySql\wamp\tmp\phpCC75.tmp'(length=43)
  'error' =>
int
0
  'size' =>
int
1032323
上传文件需要注意的问题:
1.控制上传文件的类型和大小:因为安全性以及服务器的空间有限
2.减少文件重名的概率 修改文件名 建文件夹:因为上传同名文件会覆盖以前的文件
3.关于中文乱码问题:因为编码格式问题,windows编码格式为gb2312
4.存储文件的问题:因为上传的文件存在临时文件夹中,程序关闭会清空
 
 
if($_FILES["file"]["type"] == "image/jpeg" && $_FILES["file"]["size"]<=102400){
    //造一个存储路径
    $yuan = $_FILES["file"]["tmp_name"];
    $filename = "./img/".date("YmdHis").$_FILES["file"]["name"];
    //将存储路径的编码格式变为国标
    $filename = iconv("UTF-8","gb2312",$filename);    //任何地方都可以用来转码
    //判断文件是否存在
    if(file_exists($filename))    {
        die("文件已存在");
    }
    //移动文件
    move_uploaded_file($yuan,$filename);
}
 
图片预览上传工具
 
向数据库中存注册信息,在读取出来,其中文件存取和读取的都是路径,需要注意的是存的时候存绝对路径
实例:上传与下载
注册页面:
<h1>上传文件</h1>
<div>说明:只能上传word文档,上传文件的大小必须小于1M</div>
<br />
<form action="scchuli.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="上传" />
</form>
 
处理页面:
<?php
session_start();
$_SESSION["uid"] = "lisi";
 
include("../../DBDA.php");
$db = new DBDA();
 
$filename="";
 
//加限制条件
if($_FILES["file"]["type"]=="application/vnd.openxmlformats-officedocument.wordprocessingml.document" && $_FILES["file"]["size"]<1048576)
{
    //造存储路径
    $filename = "./uploads/".date("YmdHis").$_FILES["file"]["name"];
    //转编码格式
    $filename = iconv("utf-8","gb2312",$filename);
 
    //文件是否存在
    if(!file_exists($filename))
    {
        //移动文件保存
        move_uploaded_file($_FILES["file"]["tmp_name"],$filename);
    }
}
 
//向文件表添加一条数据
$uid = $_SESSION["uid"];
$lujing = iconv("gb2312","utf-8",$filename);
$urls = "/0630/wenjian/".$lujing;
$times = date("Y-m-d H:i:s");
$name = $_FILES["file"]["name"];
 
$sql = "insert into wenjian values('','{$uid}','{$urls}','{$times}','{$name}')";
 
$db->Query($sql,0);
 
header("location:guanli.php");
 
显示页面:
<?php
session_start();
include("../../DBDA.php");
$db = new DBDA();
 
$uid = $_SESSION["uid"];
 
$sql = "select * from wenjian where uid='{$uid}'";
$attr = $db->Query($sql);
?>
 
<h1>文件管理页面</h1>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
    <td>上传者</td>
    <td>上传时间</td>
    <td>文件名</td>
    <td>操作</td>
</tr>
<?php
    foreach($attr as $v)
    {
        $sname = "select name from users where uid='{$v[1]}'";
        $name = $db->StrQuery($sname);
        echo "<tr>
                    <td>{$name}</td>
                    <td>{$v[3]}</td>
                    <td>{$v[4]}</td>
                    <td><a href='{$v[2]}'>下载</a></td>//浏览器打不开会下载
                </tr>";
    }
?>
</table>
 
 

推荐阅读