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 mssql 时间格式问题
Jan 13 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
May 29 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
Oct 21 PHP
PHP会话处理的10个函数
Aug 11 PHP
PHP经典算法集锦【经典收藏】
Sep 14 PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 PHP
PHP折半(二分)查找算法实例分析
May 12 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 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获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
2016/05/17 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
ext实现完整的登录代码
2008/08/08 Javascript
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python如何获取服务器硬件信息
2017/05/11 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
python基于递归解决背包问题详解
2019/07/03 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
中科创达面试题
2016/12/28 面试题
小学毕业感言150字
2014/02/05 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
神农溪导游词
2015/02/11 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript