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 "非法上传文件";

}

}

上面的这种方式基本就满足了文件上传。但我需要的不是这样的。

 

 需求:先点击上传文档,然后选择上传文件,JS上传后会返回一个值,显示当前时间戳问名称的文件在文档名称这个框框中。

然后点击提交后,提交表单。

服务器处理提交的表单,对上传的文件进行重命名。

问题也随之而来了,服务器是IIS的,然后它是用的映射的方式实现的虚拟跟目录。

这样的话$_SERVER[‘DOCUMENT_ROOT’]就不在PHP站点的根目录

虽然完成了上传的功能,但无法下载这个文件。从服务器的安全考虑,还是打算把文件放在PHP站点内。

然后我就陷进了一个思维局限中。

再仔细想一想:

为何我不用实现PHP的上传机制的方式在重复一次。

PHP不是将文件先放到临时目录里面吗?然后我为嘛假设JS上传成功后的目录也是一个临时目录,

然后在再一次提交表单的时候进行文件复制。到指定的目录这样就完成了需要的功能。

PHP有一个文件复制函数Copy(); 然后在配合rename()函数。这样就可以完成上传后文件的第二次移动和重命名了。

注意:在window平台下如果复制一个零字节的文件,copy() 将返回 FALSE ,但文件也会被正确复制。

然后PHP在文件处理上,积极的参考了Liunx的文件处理机制。PHP的文件操作效率,这跟I/O对写和操作系统有关。

总结:其实解决问题的方式很多,而且不要给自己画圈从而限定自己的思维。

 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索站点
, 文档
, php
, 服务器
, 文件
函数
php 上传验证类、php 文档上传验证、php处理文件上传、php处理上传图片、php 文件上传处理类,以便于您获取更多的相关知识。

时间: 2024-11-03 02:04:56

PHP的文件上传处理验证示例的相关文章

Node.js开发教程之基于OnceIO框架实现文件上传和验证功能_node.js

OnceIO 是 OnceDoc 企业内容(网盘)的底层Web框架,它可以实现模板文件.静态文件的全缓存,运行起来完全不需要I/O操作,并且支持客户端缓存优化,GZIP压缩等(只在第一次压缩),拥有非常好的性能,为您节约服务器成本.它的模块化功能,可以让你的Web进行分布式存储,即一个扩展包里即包含前端.后端和数据库定义,只需通过添加/删除目录的方式就可实现功能删减,实现真正的模块化扩展.这里是介绍如何使用OnceIO的一系列文章. 在这一章节中,我们将为大家演示如何使用 OnceIO 实现文件

JavaWeb文件上传下载功能示例解析_java

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 1. 上传简单示例 Jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"&g

Apache Commons fileUpload文件上传多个示例分享_java

本文通过实例来介绍如何使用commons-fileupload.jar,Apache的commons-fileupload.jar可方便的实现文件的上传功能,具体内容如下 将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用.下面举例介绍如何使用它的文件上传功能. 所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0.FileUpload 是基于 Commons IO的,所以在进入项目前先确定Com

java中Struts2 的文件上传和下载示例_java

文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置为 post 需添加 <input type="file"> 字段. Struts 对文件上传的支持 在 Struts 应用程序里, FileUpload 拦截器和 Jakarta Commons FileUpload 组件可以完成文件的上传. 步骤: 在 Jsp 页面的文件上

.Net中FileUpload控件文件上传与验证实用例子

最简单的fileupload控件上传图片例子  代码如下 复制代码 using System.IO; protected void Button1_Click(object sender, EventArgs e) { Boolean fileOk = false; //指定文件路径,pic是项目下的一个文件夹:-表示当前网页所在的文件夹 String path = Server.MapPath("~/");//物理文件路径 //文件上传控件中如果已经包含文件 if (FileUplo

HTML &amp;lt;input&amp;gt; accept 属性-规定能够通过文件上传进行提交的文件类型

定义和用法 文章地址: http://www.w3school.com.cn/tags/att_input_accept.asp accept 属性规定了可通过文件上传提交的服务器接受的文件类型. 注意:accept 属性仅适用于 <input type="file">. 提示:请不要将该属性作为您的验证工具.应该在服务器上对文件上传进行验证. 实例 规定在文件上传中服务器只接受图像文件: <form> <input type="file&quo

asp.net 文件上传进度条实现代码

asp教程.net 文件上传进度条实现代码 index.htm就是文件上传页面,提交form给uploadhandler目录下的default.aspx,以实现文件上传. progresshandler目录下三个文件为abort.ashx.genericguid.ashx,handler.ashx功能分别为:根据guid取消正在上传的文件,生成guid,根据guid获取上传信息. 第一步:建立index.htm页面,这个上传页面,需要注意的就是需要一个隐藏的iframe,并且名字为form提交的

django 文件上传 验证-django文件上传的格式验证问题,在线等!

问题描述 django文件上传的格式验证问题,在线等! 用django写入个文件上传的页面,需要上传文件名称和文件,且文件名只能为数字: class uploadForm(forms.Form): name = forms.IntegerField() headImg = forms.FileField() 遇到一个问题: 当上传的文件很大时,需要等文件上传完成后才会去验证文件名的格式是否为数字,如果 文件名不是纯数字上传就失败了,又得花很长时间重新上传,这显然是不合理的, django有什么方

分享一个.NET版的多选文件上传操作示例

文件上传,无刷新上传,文件批量上传,批量无刷新上传,这些词这年头好像非常多,不管那种上传能满足实际的需求就是好的,一般上传文件时,点文件浏览框,只能选 择单个文件,如果要上传多个,浏览多次,然后点击批量上传就可以了,也很好的,也不刷新也有进度显示,完全不错的.网上也有关于上传文件的能够多选的例子,点浏 览时可以按住ctrl键或者shift键选择多个,然后上传.但是好像这样的.NET版的不多,朋友发我一个整理过的Demo,之后我又稍微整理了下,觉得还好,可以分享给大家一 下,好与不好就不说,因为没