PHP文件上传,下载,Sql工具类!
PHP文件上传,下载,Sql工具类! 对文件大小,文件类型 同名覆盖 中文转码的操作,可直接使用
前台 upload.html
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form enctype="multipart/form-data" action="uploadProcess.php" method="post">
<table>
<tr><td align="center" colspan="2"><font style="font-size: 40px; font-family: 华文彩云;" >文件上传</font></td></tr>
<tr>
<td>请填写用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>介绍:</td>
<td><textarea name="intro" rows="10" cols="80"></textarea></td>
</tr>
<tr>
<td>请选择你要上传的文件</td>
<td><input type="file" name="myfile"></td>
</tr>
<tr><td><input type="submit" value="上传文件" /></td></tr>
</table>
</form>
</body>
</html>
控制器 FileProcess.php
<?php
require_once 'FileService.php';
$fileService = new FileService(); if (!empty($_REQUEST['flag'])) {
$flag = $_REQUEST['flag'];
//上传
if ($flag == "upload") {
$username = $_POST['username'];
$intro = $_POST['intro']; $fileService -> Upload($username,$intro);
}elseif ($flag == "down") {
//接收要下载的文件名字
$filepath = $_GET['filepath'];
$filename = $_GET['filename']; $fileService = new FileService();
$fileService->Download($filepath,$filename); }
} ?>
后台 FileService.php
<?php
header("content_type:text/html;charset=utf-8");
require_once 'SqlHelper.php';
error_reporting(E_ALL & ~E_NOTICE); class FileService{ //查询所有文件信息
function fileInfo(){ $sql = "select * from upload";
$sqlHelper = new SqlHelper(); $res = $sqlHelper->execute_dpl($sql);
return $res; $res->free();
} /*
*上传文件
* 功能
* 限制文件大小/类型
* 防止不同用户上传同名图片被覆盖的问题
* 防止同一用户上传的文件名相同的问题
* 参数
* $username
* $intro
*
*is_uploaded_file 上传到tmp缓存
*move_uploaded_file 移动到目标文件
*/
function Upload($username,$intro){ /*********对文件类型进行限制**********/ //获取文件的大小,限制上传文件的大小10M
$file_size = $_FILES['myfile']['size'];
if ($file_size>10*1024*1024) {
echo "<script>alert('上传失败,上传的文件不能超过10M的文件');history.go(-1);</script>";
//echo "上传失败,上传的文件不能超过10M的文件!";
exit();
} //限制上传文件类型
/*
$file_type = $_FILES['myfile']['type'];
if ($file_type!='image/jpg' && $file_type!='image/pjpeg') {
echo "上传失败,文件类型只能是jpg格式!";
exit();
}*/ //判断文件是否上传成功
if (is_uploaded_file($_FILES['myfile']['tmp_name'])) { /***防止不同用户上传同名图片被覆盖的问题->给每个用户创建一个文件夹*****/
//一般创建文件夹的时候根据id创建(username换成id,入参时带入id),防止汉字乱码
//给每个用户动态创建一个相应的文件夹
$user_path = $_SERVER['DOCUMENT_ROOT']."Demo/File/UpDown/upload/".$username;
//判断该用户是否已经有文件夹
if (!file_exists($user_path)) {
mkdir($user_path);
} /****防止同一用户上传的文件名相同的问题->给每个文件名加上时间戳********/
//tmp里的文件名
$file_name = $_FILES['myfile']['name'];
//把缓存文件转存到你希望的目录
$uploaded_file = $_FILES['myfile']['tmp_name'];
//目标路径=(目标目录+用户名)+当前时间+后缀(strpos()字符串首次出现的位置)
$move_to_file = $user_path."/".time().rand(1,1000).substr($file_name, strpos($file_name, ".")); //对中文路径转码
$move_to_file = iconv("utf-8", "gb2312", $move_to_file); /******************数据库操作***********************/
//存入数据库
$uptime = date('Y-m-d H:i:s'); //获取当前上传时间 $sql = "insert into upload (username,fname,fsize,uptime,fpath,intro) values ('$username','$file_name','$file_size','$uptime','$move_to_file','$intro')"; $sqlHelper = new SqlHelper();
$res = $sqlHelper->execute_dml($sql); //判断是否将上传的文件移动到目标位置(先判断是否上传成功,再判断是否添加到数据库)
if (move_uploaded_file($uploaded_file, $move_to_file)) { //res=1表示添加上传成功
if ($res == 1) { echo "<script>alert('{$_FILES['myfile']['name']}文件上传成功');window.location.href='down.php';</script>";
}else{
echo "<script>alert('文件上传失败');history.go(-1);</script>";
} }else{
echo "<script>alert('文件上传失败');history.go(-1);</script>";
} }else{
echo "<script>alert('文件上传失败');history.go(-1);</script>";
}
} /**
*
* 参数说明:
* 下载文件
* $filepath 文件路径
* $filename 文件名
*
*/
function Download($filepath,$filename){
//对中文文件名进行转码
$filename=iconv("UTF-8","GB2312",$filename); if(!file_exists($filepath)){ //检查文件是否存在
echo "<script>alert('该文件不存在!');history.go(-1);</script>";
// echo "该文件不存在!"; return;
} $fp = fopen($filepath, 'r'); //打开文件
$file_size = filesize($filepath); //计算文件大小 if ($file_size>10*1024*1024) { echo "<script>window.alert('文件过大,您没权限下载')</script>";
return;
}
//HTTP头部信息
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".$file_size);
header("Content-Disposition: attachment; filename=".$filename); $buffer = 1024;
//为了下载安全,做一个文件字节读取计数器
$file_count = 0;
//判断文件是否结束 feof
while (!feof($fp) && ($file_size-$file_count > 0)) { $file_data = fread($fp, $buffer); //统计读了多少字节
$file_count+=$buffer; echo "$file_data"; //把数据会送给浏览器
}
fclose($fp);
} } ?>
工具类 SqlHelper.php
<?php /**
* sql工具类(dml,dpl,dpl_arr,close_link)
*
*1.创建MySqli对象
*2.操作数据库(发送sql)
*3.处理结果
*4.关闭资源
*
*/ class SqlHelper {
private $link;
private static $host = 'localhost';
private static $user = 'root';
private static $pwd = '';
private static $db = 'test'; public function __construct() { //初始化
$this->link = new MYSQLi(self::$host,self::$user,self::$pwd,self::$db);
if ($this->link->connect_error){
die("数据库连接失败".$this->link->connect_error);
}
$this->link->query("set names utf8");
} /**
* dpl操作
* @param unknown $sql
*/
public function execute_dpl($sql){
$res = $this->link->query($sql) or die("操作dpl失败".$this->link->error);
return $res;
} /**
* dpl操作
* @param $sql
* @return arr
* 把结果放在数组里。这样资源可以随时关闭,返回一个数组
*/ public function execute_dpl_arr($sql){
$arr = array();
$res = $this->link->query($sql) or die("操作dpl_arr失败".$this->link->error);
//把$res=>$arr,把结果集内容转移到一个数组中
while ($row = $res->fetch_assoc()){
$arr[] = $row;
}
//这里可以把资源立即关闭
$res->free();
return $arr;
} /**
* dml操作 update/delete/insert
* @param unknown $sql
*/
public function execute_dml($sql){ $res = $this->link->query($sql) or die("操作dml失败".$this->link->error);
if (!$res){
return 0; //失败
}else {
if ($this->link->affected_rows>0){
return 1; //成功
}else {
return 2; //没有行受到影响
}
}
$res->free();
} //关闭链接
public function close_link(){
if (!empty($this->link)){
$this->link->close();
}
} }
PHP文件上传,下载,Sql工具类!的更多相关文章
- SpringMVC文件上传下载
在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...
- commons-fileupload实现文件上传下载
commons-fileupload是Apache提供的一个实现文件上传下载的简单,有效途径,需要commons-io包的支持,本文是一个简单的示例 上传页面,注意设置响应头 <body> ...
- JavaWeb 文件上传下载
1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...
- 转载:JavaWeb 文件上传下载
转自:https://www.cnblogs.com/aaron911/p/7797877.html 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端 ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- Hadoop之HDFS原理及文件上传下载源码分析(下)
上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文 ...
- CentOS下安装配置NFS并通过Java进行文件上传下载
1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...
- C# Http文件上传下载
C# Http文件下载公共类(支持断点续传) http://www.cnblogs.com/hayden/archive/2012/04/26/2472815.html C# Http方式下载文件到本 ...
- SpringMVC整合fastdfs-client-java实现web文件上传下载
原文:http://blog.csdn.net/wlwlwlwl015/article/details/52682153 本篇blog主要记录一下SpringMVC整合FastDFS的Java客户端实 ...
随机推荐
- Mysql root账号general_log_file方法获取webshell
在前面的phpmyadmin漏洞利用专题中介绍了如何通过root账号来获取webshell,但在现实情况中,由于Mysql版本较高以及配置文件的缘故,往往无法直接通过root账号写入网站真实路劲下获取 ...
- webstorm “Unterminated statement”
使用webstorm的时候,写console.log,或者一些其他语句的时候 偶尔会出现这种提示,不是报错,就是看着别扭,应该是写法规范问题. 解决办法: 在下面空一行就行了
- 大数据与Hadoop
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...
- HDFS概要
--HDFS-- Hadoop Distributed File System HDFS一个分布式,高容错,可线性扩展的文件系统 简介: Hadoop分布式文件系统(HDFS)是一种分布式文件系统,设 ...
- POJ 2578
#include<iostream> #include<stdio.h> #include<vector> using namespace std; int mai ...
- eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled
具体请看: 亲测有效: http://www.cnblogs.com/shellshell/p/6122811.html
- git merge 的过程及冲突处理演示
master分支上有一个1.txt文件,进行修改后提交 $ cat 1.txt 1 11 12 $ echo 13 >> 1.txt $ git commit -a -m "mo ...
- 8皇后问题(c++/python实现)
问题描述:在8*8的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任何两个皇后都不能处于同一行.同一列或者同一斜线上,问有多少种摆法. 算法分析: 利用3个数组分表来标记冲突,数组a.b.c. a数组 ...
- 基于sql service会话共享,实现SSO
1:session的存储基于sql service数据库来存储 2:修改sql service中会话管理的系统存储过程 3:实现几个站点的会话共享 4:应用共享会话,实现单点登录
- Shell脚本 | 性能测试之启动流量
安卓应用的流量统计有多种方式,点击「阅读原文」可以看到一篇别人写的文章,关于安卓流量数据的获取,写的挺全的,列举了几种不同方式的优劣.(见文末参考链接) 今天我要分享的是通过脚本一键获取应用的启动流量 ...