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注入或HTML表单滥用的PHP程序
Jan 21 PHP
php db类库进行数据库操作
Mar 19 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
PHP header函数分析详解
Aug 06 PHP
PHP 图片水印类代码
Aug 27 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
EsLint入门学习教程
2017/02/17 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
python 图片验证码代码分享
2012/07/04 Python
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
python中的闭包函数
2018/02/09 Python
django的settings中设置中文支持的实现
2019/04/28 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
python做接口测试的必要性
2019/11/20 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
婚礼司仪主持词
2014/03/14 职场文书
导游词之南京中山陵
2019/11/27 职场文书