PHP文件上传处理案例分析


Posted in PHP onOctober 15, 2016

本文实例讲述了PHP文件上传处理的方法。分享给大家供大家参考,具体如下:

最近遇到一个事,把自己坑了好久,我想说说我开始的想法

PHP的上传机制封装的很完全,基本几行代码就能实现,他的实现流程是这样的

UPLOAD到文件到临时目录中?>使用move_uploadde_file()到指定的目录

这就是PHP上传流程,或者你在中途再进行一些验证。例如判断是不是通过upload方式提交的文档,或者文件的扩展是不是我们允许的

等等一系列验证。我给出简单的代码也算是抛砖引玉了。

$targetFolder = '/uploads'; // 定义根目录
if (!empty($_FILES)) {
  $tempFile = $_FILES['Filedata']['tmp_name'];
if(is_uploaded_file($tempFile))
{
  $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
  $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];
  $fileTypes = array('jpg','jpeg','gif','png'); // 允许的后缀扩展
  $fileParts = pathinfo($_FILES['Filedata']['name']);
  if (in_array($fileParts['extension'],$fileTypes)) {
    move_uploaded_file($tempFile,$targetFile);
    echo '1';
  } else {
    echo '非法上传文档.';
  }
}else
{
  echo "非法上传文件";
}
}

上面的这种方式基本就满足了文件上传。但我需要的不是这样的。

PHP文件上传处理案例分析

上传功能

需求:先点击上传文档,然后选择上传文件,JS上传后会返回一个值,显示当前时间戳问名称的文件在文档名称这个框框中。

然后点击提交后,提交表单。

服务器处理提交的表单,对上传的文件进行重命名。

问题也随之而来了,服务器是IIS的,然后它是用的映射的方式实现的虚拟跟目录。

这样的话$_SERVER[‘DOCUMENT_ROOT']就不在PHP站点的根目录

虽然完成了上传的功能,但无法下载这个文件。从服务器的安全考虑,还是打算把文件放在PHP站点内。

然后我就陷进了一个思维局限中。

再仔细想一想:

为何我不用实现PHP的上传机制的方式在重复一次。

PHP不是将文件先放到临时目录里面吗?然后我为嘛假设JS上传成功后的目录也是一个临时目录,

然后在再一次提交表单的时候进行文件复制。到指定的目录这样就完成了需要的功能。

PHP有一个文件复制函数Copy(); 然后在配合rename()函数。这样就可以完成上传后文件的第二次移动和重命名了。

注意:在window平台下如果复制一个零字节的文件,copy() 将返回 FALSE ,但文件也会被正确复制。

然后PHP在文件处理上,积极的参考了Liunx的文件处理机制。PHP的文件操作效率,这跟I/O对写和操作系统有关。

总结:其实解决问题的方式很多,而且不要给自己画圈从而限定自己的思维。

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

PHP 相关文章推荐
php读取javascript设置的cookies的代码
Apr 12 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
深入PHP许愿墙模块功能分析
Jun 25 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
html静态页面调用php文件的方法
Nov 13 PHP
php有效防止同一用户多次登录
Nov 19 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
PHP实现基于状态的责任链审批模式详解
May 31 PHP
关于laravel 子查询 & join的使用
Oct 16 PHP
如何在PHP中读写文件
Sep 07 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 #PHP
基于php判断客户端类型
Oct 14 #PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 #PHP
php生成与读取excel文件
Oct 14 #PHP
基于PHP实现用户注册登录功能
Oct 14 #PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 #PHP
php车辆违章查询数据示例
Oct 14 #PHP
You might like
PHP常用函数小技巧
2008/09/11 PHP
thinkphp分页实现效果
2016/10/13 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
兼职学生的自我评价
2013/11/24 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
顶岗实习计划书
2015/01/16 职场文书
学校捐款活动总结
2015/05/09 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS