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 for 循环语句使用方法详细说明
May 09 PHP
常见的PHP五种设计模式小结
Mar 23 PHP
php 抽象类的简单应用
Sep 06 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
destoon二次开发模板及调用语法汇总
Jun 21 PHP
PHP函数in_array()使用详解
Aug 20 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
PHP图片加水印实现方法
May 06 PHP
Laravel中间件实现原理详解
Oct 09 PHP
PHP图像识别技术原理与实现
Oct 27 PHP
CodeIgniter框架常见用法工作总结
Mar 16 PHP
php中str_pad()函数用法分析
Mar 28 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
web方式ftp
2006/10/09 PHP
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
关键字final的用法
2013/10/02 面试题
建筑工程实习自我鉴定
2013/09/19 职场文书
入党申请自荐书范文
2014/02/11 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
离婚协议书的范本
2015/01/27 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python