php部分---文件上传:错误处理、 客户端和服务器端的限制
1.客户端页面
<!---客户端的配置
1.表单页面
2.表单发送方式为post
3.表单form中添加enctype="multipart/form-data"
------->
<body> <form action="doaction.php" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="submit" value="上传"> </form> </body>
2.处理页面doaction
<?php
//$_FILES:文件上传变量
print_r($_FILES);
//$_FILES:保存着上传文件的信息
/*1.name:上传文件的名称
2.type:上传文件的MIME类型
3.tmp_name:上传到服务器上的临时文件名
4.size:上传文件的大小
5.error:上传文件的错误号*/
$filename=$_FILES['myfile']['name'];
$type=$_FILES['myfile']['type'];
$tmp_name=$_FILES['myfile']['tmp_name'];
$size=$_FILES['myfile']['size'];
$error=$_FILES['myfile']['error'];
//将服务器上的临时文件移动到指定文件夹
//1.move_uploaded_file(临时文件名,‘文件夹名’.$filename); 将服务器上的临时文件移动到指定文件夹,叫什么名字($filename),移动成功返回true,移动失败返回false。
//move_uploaded_file($tmp_name,"wenjian/".$filename);
//2.copy("临时文件名","文件名".$filename) 将服务器上的临时文件拷贝到指定文件夹
//文件上传配置
/*file_uploads = on,支持HTTP上传
upload_tmp_dir= ,临时文件保存的目录
upload_max_filesize=2M,允许上传文件的最大值
max_file_uploads=20,允许一次上传的最大文件数
post_max_size=8M,post方式发送数据的最大值
*/
3.错误信息处理
//上传文件失败时,判断一下错误号,只有为0或者UPLOAD_ERR_OK,才没有错误发生,上传成功
//下面是抓取错误
if($error==UPLOAD_ERR_OK)
{
if(move_uploaded_file($tmp_name,"wenjian/".$filename))
{
echo "文件".$filename."上传成功";
}else
{
echo "文件".$filename."上传失败";
}
}
else
{
//匹配错误信息
switch($error)
{
case 1:
echo "上传文件超过了PHP配置文件中upload_max_filesize选项的值";
break;
case 2:
echo "超过了表单MAX_FILE_SIZE的限制大小";
break;
case 3:
echo "文件部分被上传";
break;
case 4:
echo "没有选择上传文件";
break;
case 6:
echo "没有找到临时目录";
break;
case 7:
case 8:
echo "系统错误";
break;
}
}
?>
4.上传文件限制
//客户端限制: //通过表单隐藏域限制上传文件的最大值 <input type="hidden" name="MAX_FILE_SIZE" value="字节数"> //通过accept属性限制上传文件的类型 <input type="file" name="myfile" accept="文件的MIME类型">
//服务器端限制
限制上传文件大小
限制上传文件类型
检测是否为真实图片类型
检测是否为HTTP POST方式上传
<?php
$fileinfo=$_FILES["myfile"];
$maxsize=2097152; //写最大的字节数,自己算
$allowext=array('jpeg','jpg','pnd','gif','wbmp'); //定义一下允许的上传文件类型
//1.判断错误号
if($fileinfo['error']==0)
{
//1.判断上传文件大小
if($fileinfo['size']>$maxsize)
{
exit('上传文件过大');
}
//2.判断上传文件类型是不是在规定类型中
$ext=strtolower(end(explode(',',$fileinfo['name'])));//截取上传文件扩展名
if(!in_array($ext,$allowext)) // 判断上传文件的扩展名是不是在定义类型中
{
exit('非法文件类型');
}
//3.判断文件是否是通过HTTP POST方式上传上来的
if(!is_uploaded_file($fileinfo['tmp_name']))
{
exit('文件不是通过HTTP POST方式上传上来的');
}
//4.检测是否为真实的图片类型,而不是认为改动的
$flag=true;
if($flag)
{
if(!getimagesize($fileinfo['tmp_name']))
{
echo "不是真实的图片类型";
}
}
$path='uploads'; //服务器上存储文件的文件名
//5.判断服务器上存储的文件夹在不在
if(!file_exists($path))
{
mkdir($path,0777,true);//不存在就创建一个目录
chmod($path,0777);//加一个权限
}
//6.确保文件名唯一,防止重名产生覆盖
$uniname=md5(uniqid(microtime(true),true)).'.'.$ext; //通过MD5加密等措施给文件名取名
$destination=$path.'/'.$uniname;
if(move_uploaded_file($fileinfo['tmp_name'],$destination)) //上传文件
{
echo "文件上传成功";
}else
{
echo "文件上传失败";
}
}else
{
//匹配错误信息
switch($error)
{
case 1:
echo "上传文件超过了PHP配置文件中upload_max_filesize选项的值";
break;
case 2:
echo "超过了表单MAX_FILE_SIZE的限制大小";
break;
case 3:
echo "文件部分被上传";
break;
case 4:
echo "没有选择上传文件";
break;
case 6:
echo "没有找到临时目录";
break;
case 7:
case 8:
echo "系统错误";
break;
}
}
?>
php部分---文件上传:错误处理、 客户端和服务器端的限制的更多相关文章
- MVC文件上传09-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹,并在其中创建分类子文件夹
为用户创建专属上传文件夹后,如果想在其中再创建分类子文件夹,该怎么做?可以在提交文件的视图中再添加一个隐藏域,并设置 name="uploadContext". 相关兄弟篇: MV ...
- MVC文件上传08-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹
当需要为每个用户建立一个专属上传文件夹的时候,可以在提交文件的视图中添加一个隐藏域,并设置name="objectContext". 相关兄弟篇: MVC文件上传01-使用jque ...
- MVC文件上传07-使用客户端jQuery-File-Upload插件和服务端Backload组件裁剪上传图片
本篇通过在配置文件中设置,对上传图片修剪后保存到指定文件夹. 相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小 MVC文件上传02-使用HttpPostedFileB ...
- MVC文件上传06-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义控制器上传多个文件
当需要在控制器中处理除了文件的其他表单字段,执行控制器独有的业务逻辑......等等,这时候我们可以自定义控制器. MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证 ...
- MVC文件上传05-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义上传文件夹
在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小 MVC文 ...
- php文件上传错误信息说明对照表
php文件上传错误信息说明对照表: UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功UPLOAD_ERR_INI_SIZE:其值为1,上传的文件超过了php.ini中upload_ma ...
- MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传
本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小 ...
- NetworkComms 文件上传下载和客户端自动升级(非开源)
演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 淘宝地址:https://shop183793329.taobao.com 联系QQ号:3201175853 许可:购 ...
- PHP文件上传错误类型及说明
从 PHP 4.2.0 开始,PHP 将随文件信息数组一起返回一个对应的错误代码.该代码可以在文件上传时生成的文件数组中的 error 字段中被找到,也就是 $_FILES['userfile'][' ...
- strut2 自己定义文件上传错误信息
在文件上传过程中我们能够指定拦截器对文件类型.后缀名.大小进行设定,action中的配置: <interceptor-ref name="fileUpload"> &l ...
随机推荐
- NPOI 2.0 读取、编辑、保存Excel文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- Java_DOM创建XML
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream; ...
- linux tar命令的使用
tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包 tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c //打包 -x //解压 -f //指定文件 ...
- Android深度探索--HAL与驱动开发----第一章读书笔记
1. Android的系统架构有四层,它的发展目前来说 是比较成熟的,流行于目前的市场.其架构包括四层(linux内核.C/C++代码库.Android SDK API.应用程序). 2. 驱动是直接 ...
- Java并发编程学习笔记(一)——线程安全性
主要概念:线程安全性.原子性.原子变量.原子操作.竟态条件.复合操作.加锁机制.重入.活跃性与性能. 1.当多个线程访问某个状态变量并且其中有一个线程执行写入操作时,必须采用同步机制来协同这些线程对变 ...
- 【C编译器】MinGw安装与使用(调试问题待续)
不想装vs2005之类的,想要一个轻量级的C语言编译器,希望将焦点放在如何写好代码上: 本人信奉:代码质量是靠设计和检视保证的,不是靠调试: 1.安装MinGW http://www.mingw.or ...
- javac找不到或无法加载主类 com.sun.tools.javac.Main
在安装jdk后或者以前安装了jdk某时使用javac编译java文件时出现找不到或无法加载主类com.sun.tools.javac.Main,这个问题时,网上一般都说是环境变量配置不对,这样的说法其 ...
- 学习SVG系列(3):SVG Stroke属性
SVG stroke 属性 1.stroke 2.stroke-width 3.stroke-linecap 4.stroke-dasharray 5.stroke-opacity 6.stroke- ...
- Ubuntu 16.04 64位安装insight 6.8
1. apt-get install insight已经不管用. 2. 编译源码死都有问题. 3. 拜拜,用KDBG.
- C#检测本地网络状态
using System; using System.Runtime.InteropServices; public static class NetTool { [Flags] private en ...