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 相关文章推荐
解决中英文字符串长度问题函数
Jan 16 PHP
PHP mkdir()定义和用法
Jan 14 PHP
用PHP实现的四则运算表达式计算实现代码
Aug 02 PHP
使用php get_headers 判断URL是否有效的解决办法
Apr 27 PHP
深入理解curl类,可用于模拟get,post和curl下载
Jun 08 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 PHP
自编函数解决pathinfo()函数处理中文问题
Nov 03 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
php获取给定日期相差天数的方法分析
Feb 20 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
PHP学习笔记之session
May 06 PHP
php操作mongodb封装类与用法实例
Sep 01 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
文章推荐系统(三)
2006/10/09 PHP
以文本方式上传二进制文件的PHP程序
2006/10/09 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
javascript 内存回收机制理解
2011/01/17 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
layui分页效果实现代码
2017/05/19 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
幼儿园中秋节活动方案
2014/02/06 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers