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 print EOF实现方法
May 21 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
一个简单的PHP验证码实现代码
May 10 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 PHP
PHP中mysql_field_type()函数用法
Nov 24 PHP
php生成与读取excel文件
Oct 14 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
PHP7中I/O模型内核剖析详解
Apr 14 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 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+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
php实现图片压缩处理
2020/09/09 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
python去掉空白行的多种实现代码
2018/03/19 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
python使用PyQt5的简单方法
2019/02/27 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Django中的AutoField字段使用
2020/05/18 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
某科技软件测试面试题
2013/05/19 面试题
高中毕业生个人自我鉴定
2013/11/24 职场文书
教师节演讲稿
2014/05/06 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书