文件上传分为两个部分,HTML显示部分和PHP处理部分,HTML部分主要是让用户来选择所要上传的文件,然后通过PHP中的$_FILES,我们可以把文件上传到服务器的指定目录。
1.客户端页面
客户端的配置
1.表单页面
2.表单发送方式为post
3.表单form中添加enctype="multipart/form-data"
2.处理页面doaction
$_FILES:文件上传变量
print_r($_FILES);
$_FILES:保存着上传文件的信息
1.name:上传文件的名称
2.type:上传文件的MIME类型
3.tmp_name:上传到服务器上的临时文件名
4.size:上传文件的大小
5.error:上传文件的错误号
rush:
PHP;">
$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。
rush:
PHP;">
move_uploaded_file($tmp_name,"wenjian/".$filename);
2.copy("临时文件名","文件名".$filename) 将服务器上的临时文件拷贝到指定文件夹
文件上传配置
rush:
PHP;">
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,才没有错误发生,上传成功
下面是抓取错误
《客户端限制:》
通过表单隐藏域限制上传文件的最大值
通过accept属性限制上传文件的类型
《服务器端限制》
1.限制上传文件大小
2.限制上传文件类型
3.检测是否为真实图片类型
4.检测是否为HTTP POST方式上传
5.判断服务器上存储的文件夹在不在
6.防止重名产生覆盖
rush:
PHP;">
$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(!ge
timagesize($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;
}
}
?>
第一步:表单页内容
第二步:处理界面。定义变量
rush:
PHP;">
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.限制上传文件大小
2.限制上传文件类型
3.检测是否为真实图片类型
4.检测是否为HTTP POST方式上传
5.判断服务器上存储的文件夹在不在
6.防止重名产生覆盖
rush:
PHP;">
//服务器端限制
PHP
$fileinfo=$_FILES["myfile"];
$maxsize=2097152; //写最大的字节数,自己算
$allowext=array('jpeg',true)).'.'.$ext; //通过MD5加密等措施给
文件名取名
$destination=$path.'/'.$uniname;
$destination=inocv("UTF-8","gb2312",$destination); //如果
上传的
文件名中有汉字,需要转码一下,用inocv
函数,把utf-8转为gb2312.
if(move_uploaded_file($fileinfo['tmp_name'],$destination)) //
上传文件
{
echo "
文件上传成功";
}else
{
echo "
文件上传失败";
}
}else
{
第四步:匹配错误信息
以上所述是小编给大家介绍的PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤,希望对大家有所帮助。程序员遇到问题都会上(编程之家jb51.cc)查找问题解答方法!如果觉得站点还不错,随手转发给程序员朋友一下!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。