php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例

搜索热词

@H_404_0@本文实例讲述了PHP单文件上传原理及上传函数的封装操作。分享给大家供大家参考,具体如下:

@H_404_0@表单:

@H_404_0@0.PHP:

无标题文档

请选择您要上传的文件

@H_404_0@单文件上传函数的封装:

@H_404_0@00.PHP:

//单文件上传函数的封装

//文件上传原理:将客户端的文件上传到服务器端,再将服务器端的临时文件移动到指定目录即可。

//文件的方向:客户端——>服务器(临时文件)——>指定目录,当文件进入服务器时它就是临时文件了,这时操作中要用临时文件的名称tmp_name。

//在客户端设置上传文件的限制(文件类型和大小)是不安全的,因为客户能通过源代码修改限制,所以在服务端这里设置限制。

//设置编码为UTF-8,以避免中文乱码

header('Content-Type:text/html;charset=utf-8');

//通过$_FILES接收上传文件的信息

//$fileInfo = $_FILES['myFile'];

function uploadFile($fileInfo,$uploadPath='uploads',$flag=true,$allowExt=array('jpeg','jpg','png','gif'),$maxSize = 2097152){

//判断错误号,只有为0或者是UPLOAD_ERR_OK,没有错误发生,上传成功

if($fileInfo['error']>0){

//注意!错误信息没有5

switch($fileInfo['error']){

case 1:

$mes= '上传文件超过了PHP配置文件中upload_max_filesize选项的值';

break;

case 2:

$mes= '超过了HTML表单MAX_FILE_SIZE限制的大小';

break;

case 3:

$mes= '文件部分被上传';

break;

case 4:

$mes= '没有选择上传文件';

break;

case 6:

$mes= '没有找到临时目录';

break;

case 7:

$mes= '文件写入失败';

break;

case 8:

$mes= '上传的文件被PHP扩展程序中断';

break;

}

exit($mes);

return false;

}

$ext=pathinfo($fileInfo['name'],PATHINFO_EXTENSION);

//$allowExt=array('jpeg','gif');

//检测上传文件的类型

if (! in_array ( $ext,$allowExt )) {

exit ( '非法文件类型' );

}

//检测上传文的件大小是否符合规范

//$maxSize = 2097152;//2M

if($fileInfo['size']>$maxSize){

exit('上传文件过大');

}

//检测图片是否为真实的图片类型

//$flag=true;

if($flag){

if(!getimagesize($fileInfo['tmp_name'])){

exit('不是真实的图片类型');

}

}

//检测是否是通过HTTP POST方式上传上来

if (! is_uploaded_file ( $fileInfo ['tmp_name'] )) {

exit ( '文件不是通过HTTP POST方式上传上来的' );

}

//$uploadPath='uploads';

//如果没有这个文件夹,那么就创建一个

if(!file_exists($uploadPath)){

mkdir( $uploadPath,0777,true);

chmod( $uploadPath,0777 );

}

//新文件名唯一

$uniName = md5 ( uniqid( microtime(true),true) ).'.'.$ext;

$destination = $uploadPath.'/'.$uniName;

//@符号是为了不让客户看到错误信息

if(! @move_uploaded_file($fileInfo['tmp_name'],$destination )){

exit('文件移动失败');

}

//echo '文件上传成功';

//return array(

// 'newName'=>$destination,// 'size'=>$fileInfo['size'],// 'type'=>$fileInfo['type']

//);

return $destination;

}

?>

@H_404_0@服务端操作上传的文件:

@H_404_0@000.PHP

header('content-type:text/html;charset=utf-8');

include_once '00.PHP';

$fileInfo=$_FILES['myfile'];

$allowExt=array('jpeg','gif','html','txt');//修改允许上传文件的类型,为('jpeg','txt'),也可以增加新的,如pdf,pptx等等

$newName=uploadFile($fileInfo,'imooc',false,$allowExt);//修改上传保存的文件夹为本地的'imooc',如果没有这个文件夹,那么就创建一个;//'false'参数:不要检查上传的文件是否为真实的图片,因为要允许上传除开图片类型外的其他类型文件,如html、txt

echo $newName;

?>

@H_404_0@最后,PHP的文件上传还有更智能的,功能更健全的  PHP单文件、多个单文件、多文件上传函数的封装

@H_404_0@更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP文件操作总结》、《PHP目录操作技巧汇总》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《PHP程序设计算法总结》及《PHP网络编程技巧总结》

@H_404_0@希望本文所述对大家PHP程序设计有所帮助。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯2015初赛-方程整数解-枚举

题目描述 方程: a^2 b^2 c^2 1000 这个方程有正整数解吗&#xff1f;有&#xff1a;a,b,c6,8,30 就是一组解。 求出 a^2 b^2 c^2 n(1<n<10000)的所有解&#xff0c;解要保证c>b>a>1。 输入 存在多组测试数据&#xff0c;每组测试数据一行包含一个正整数…

使用 OAS(OpenAPI标准)来描述 Web API

无论哪种类型的Web API, 都可能需要给其他开发者使用. 所以API的开发者体验是很重要的. API的开发者体验, 简写为 API DX (Developer Experience). 它包含很多东西, 例如如何使用API, 文档, 技术支持等等, 但是最重要的还是API的设计. 如果 API 设计的不好, 那么使用该API构建的…

dedemodule.class.php,DEDECMS5.7模块/模块管理列表显示空白问题解决方法

DEDECMS5.7模块/模块管理列表显示空白(站长基地配图)今天站长基地升级至dedecms最新版本&#xff0c;进入后台意外的发现&#xff0c;模块/模块管理一片空白&#xff0c;但有没有及时备份&#xff0c;于是赶紧去网上找寻解决办法&#xff0c;经过整理&#xff0c;大致有以下几种…

蓝桥杯2015初赛-星系炸弹-日期计算

题目描述 在X星系的广袤空间中漂浮着许多X星人造“炸弹”&#xff0c;用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如&#xff1a;阿尔法炸弹2015年1月1日放置&#xff0c;定时为15天&#xff0c;则它在2015年1月16日爆炸。 有一个贝塔炸弹&#xff0c;a年b…

dotNET Core 中怎样操作AD(续1)

在之前的文章《dotNET Core 中怎样操作 AD&#xff1f;》中主要以AD的数据同步到数据库的场景来描述了在 dotNetCore 中怎样操作AD&#xff0c;本文将继续介绍一些在 dotNetCore 中操作 AD 的其他常用操作。环境dotNET Core&#xff1a;3.0Novell.Directory.Ldap.NETStandard2_…

蓝桥杯2015初赛-奇妙的数字

题目描述 小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗&#xff1f; 输出 请输出该数字&#xff0c;不要输出任何多余的内容。 代码如下&#xff1a; #include <iostream> using namespace std; #inc…

Elastic发布K8s部署和控制数据管理工具官方解决方案

用于搜寻企业内部数据的搜寻引擎Elasticsearch开发商Elastic&#xff0c;发布了可在Kubernetes上部署Elastic Cloud的工具ECK 1.0。ECK向用户提供一个官方解决方案&#xff0c;来调度Kubernetes上的Elasticsearch&#xff0c;并让Kubernetes上的Elastic产品&#xff0c;能够以类…

如何启动和关闭oracle数据库,Oracle数据库启动和关闭方式总结

Oracle数据库启动和关闭的方法很多&#xff0c;下面就为您详细介绍几种常用的Oracle数据库启动和关闭方式&#xff0c;供您参考学习之用。一、几种Oracle数据库启动方式&#xff1a;1、startup nomount非安装启动&#xff0c;这种方式启动下可执行&#xff1a;重建控制文件、重…

蓝桥杯2015初赛-牌型种数-dfs

题目描述 小明被劫持到X赌城&#xff0c;被迫与其他3人玩牌。 一副扑克牌&#xff08;去掉大小王牌&#xff0c;共52张&#xff09;&#xff0c;均匀发给4个人&#xff0c;每个人13张。 这时&#xff0c;小明脑子里突然冒出一个问题&#xff1a; 如果不考虑花色&#xff0c;只…

【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分

为了更好的完善Magicodes.IE&#xff0c;春节期间我们会进行一次大的重构。由于精力有限&#xff0c;急缺文档和翻译&#xff08;将文档翻译为英文文档&#xff09;支持&#xff0c;诚邀各位加入。同时在功能方便也做了相关规划&#xff0c;有兴趣的朋友可以参与提交PR。https:…

oracle 取英文排序,Oracle中中文、数字,英文混杂形式的字段进行排序的方法

http://blog.csdn.net/p451933505/article/details/9272257对Oracle中中文、数字、英文混杂形式的字段进行排序的方法&#xff1a;例如&#xff1a;order by NLSSORT(字段名,‘NLS_SORT SCHINESE_PINYIN_M‘), to_number(translate(字段名, ‘0123456789‘ || 字段名, ‘01234…

蓝桥杯2015初赛-饮料换购-枚举

题目描述 乐羊羊饮料厂正在举办一次促销优惠活动。 乐羊羊C型饮料&#xff0c;凭3个瓶盖可以再换一瓶C型饮料&#xff0c;并且可以一直循环下去(但不允许暂借或赊账)。 请你计算一下&#xff0c;如果小明不浪费瓶盖&#xff0c;尽量地参加活动。 那么&#xff0c;对于他初始买…

Mbp,一个用于学习.net core的开发框架

Mbp(https://github.com/mbpframework/Mbp)是一个.net core 3的企业级web开发框架,是我个人用于学习.net core而发起的一个开源项目.这个借鉴了国外优秀开源项目abp vnext,及国内优秀开源框架Osharp的一些思想和实现.欢迎各路开发爱好者加入这个项目,一起学习,一起玩耍,共同成长…

oracle 每日归档量,小知识:统计Oracle的日归档量

首先这对于Oracle DBA来说是个初级问题&#xff0c;即使不熟悉的初级DBA也可以快速在网上搜索到现成的SQL语句。网上搜到的查询SQL基本类似这样的逻辑&#xff1a;select trunc(completion_time) "Date", count(*) cnt, round(sum(block_size * blocks / 1024 / 1024…

蓝桥杯2015初赛-奖券数目-枚举

题目描述 有些人很迷信数字&#xff0c;比如带“4”的数字&#xff0c;认为和“死”谐音&#xff0c;就觉得不吉利。 虽然这些说法纯属无稽之谈&#xff0c;但有时还要迎合大众的需求。 某抽奖活动奖券号码是5位数(10000-99999)&#xff0c;要求其中不要出现带“4”的号码。 主…

什么?原来C#还有这两个关键字

系列介绍简介【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面&#xff0c;比如C#的小细节&#xff0c;AspnetCore&#xff0c;微服务中的.net知识等等。场景您可以在下班坐地铁的时候&#xff0c;拿出…

php files得不到导入的文件,PHP判断文件是否被引入的方法get_included_files用法示例...

本文实例讲述了PHP判断文件是否被引入的方法get_included_files用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;// 本文件是 abc.phpinclude test1.php;include_once test2.php;require test3.php;require_once test4.php;$included_files get_included_files();…

蓝桥杯2015初赛-三羊献瑞-枚举

题目描述 观察下面的加法算式&#xff1a; 其中&#xff0c;相同的汉字代表相同的数字&#xff0c;不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字&#xff08;答案唯一&#xff09;&#xff0c;不要填写任何多余内容。 输出 请你填写“三羊献瑞”所代表…

linux系统中变量,Linux系统中的环境变量知识详解

对于没有使用过linux系统的用户来说&#xff0c;有很多术语和功能都很陌生。本文就介绍了linux系统中的环境变量的相关知识&#xff0c;具体内容如下所述。linux是一个多用户的操作系统。每个用户登录系统后&#xff0c;都会有一个专用的运行环境。通常每个用户默认的环境都是相…

如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出

这是该系列的第一篇文章&#xff1a;在ASP.NET Core 3.0中使用Serilog.AspNetCore。第1部分-使用Serilog RequestLogging来简化ASP.NET Core的日志输出&#xff08;本篇文章&#xff09;第2部分-使用Serilog记录所选的端点名称[敬请期待]第3部分-使用Serilog.AspNetCore记录MVC…