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 相关文章推荐
基于mysql的论坛(6)
Oct 09 PHP
实用函数4
Nov 08 PHP
smarty实现多级分类的方法
Dec 05 PHP
php创建session的方法实例详解
Jan 27 PHP
php把大写命名转换成下划线分割命名
Apr 27 PHP
php把数组值转换成键的方法
Jul 13 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
PHP内存缓存功能memcached示例
Oct 19 PHP
thinkPHP5 ACL用户权限模块用法详解
May 10 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
Aug 10 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
VFP与其他应用程序的集成
2006/10/09 PHP
php实现多张图片上传加水印技巧
2013/04/18 PHP
PHP实现无限极分类图文教程
2014/11/25 PHP
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
python基础教程项目二之画幅好画
2018/04/02 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
Python pandas库中的isnull()详解
2019/12/26 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
企业行政文员岗位职责
2013/12/03 职场文书
班干部演讲稿
2014/04/24 职场文书
北京奥运会口号
2014/06/21 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
上诉答辩状范文
2015/05/22 职场文书
升学宴学生致辞
2015/07/27 职场文书