PHP对文件上传的处理方法

$_FILES参数详解:

$_FILES["file"]["name"] – 被上传文件的名称
$_FILES["file"]["type"] – 被上传文件的类型
$_FILES["file"]["size"] – 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] – 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] – 由文件上传导致的错误代码

$_FILES["file"]["error"]中的["error"]值情况:

html客户端

1.客户端上传设置

文件上传的最基本方法,是使用HTML表单选择本地文件进行提交,在form表单中可以通过<input type=”file”>标记选择本地文件。如果支持文件上传操作,必须在<form>标签中将enctype和method两个属性指明相应的值,如下所示:
★enctype=”multipart/form-data”用来指定表单编码数据方式,让服务器知道,我们要传递一个文件,并带有常规的表单信息。
★method=”POST”用来指明发送数据的方法。
另外,还需要在form表单中设置一个hidden类型的input框。其中name的值为MAX_FILL_SIZE的隐藏值域,并通过设置其VALUE的值限制上传文件的大小(单位字节),但这个值不能超过PHP的配置文件中upload_max_filesize值设置的大小。文件上传表单代码如下所示:

 代码如下 复制代码

<html>
<head><title>文件上传</title></head>
<body>
<form action='upload.php' method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
选择文件<input type="file" name="上传文件">
</form>
</body>
</html>

upload.php服务器端

 代码如下 复制代码

<?php
$allowtype = array('gif','png','jpg');
$size = 1000000;
$path = "./uploads"; //设置上传后保存文件的路径
 
//判断文件是否可以成功上传到服务器,$_FILES['myfile']['error']为0则表示上传成功
if ($_FILES['myfile']['error']>0){
echo '上传错误:';
switch($_FILES['myfile']['error']){
case 1: die('上传文件大小超出了PHP配置文件中的约定值:upload_max_filesize');break;
case 2:die('上传文件大小超出表单中的约定值:MAX_FILE_SIZE');break;
case 3: die('上传文件只部分被上载');break;
case 4: die('没有上传任何文件');break;
default:die('未知错误');
}
}
 
//判断上传的文件是否为允许的文件类型,通过文件名的后缀名
$hz = array_pop(explode(".",$_FILES['myfile']['name']));
//通过判断文件的后缀方式,来确定文件是否是允许上传的文件类型
if(!in_array($hz, $allowtype)){
die("这个后缀是<b>($hz)</b>,不是允许的文件类型");
}
 
//判断上传的文件是否为允许大小
if($_FILES['myfile']['size']> $size){
die("超过了允许的<b>{$size}</b>字节大小");
}
 
//为了系统安全,也为了同名文件不会被覆盖,上传后将文件名实用系统定义
$filename = data("YmdHis").rand(100, 900).".".$hz;
 
//判断是否为上传文件
if(is_uploaded_file($_FILES['myfile']['tmp_name'])){
if(!move_uploaded_file($_FILES['myfile']['tmp_name'], $path.'/'.$filename)){
die('问题:不能将文件移动到指定目录。');
}
}else{
die("问题:上传文件{$_FILES['myfile']['name']}不是一个合法的文件:");
}
//如果文件上传成功则输出
echo "文件{$upfile}上传成功,保存在目录{$path}中,大小为{$_FILES['myfile']['size']}字节";
?>

如果我们要多文件上传只要简单对于html上传表单以数据形式操作

 代码如下 复制代码

<form action="" method="post" enctype="multipart/form-data">

<input type="hidden" name="MAX_FILE_SIZE" value="">

<input type="file" name="pic[]" /><br><br>

<input type="file" name="pic[]" /><br><br>

<input type="file" name="pic[]" /><br><br>

<input type="file" name="pic[]" /><br><br>

<input type="submit" value="upload"/>

</form>

然后对于upload.php处理文件我们只要遍历数组pic[]就可以了,

for($i=0;$i<count($up_info['name']);$i++){

}

//这样//foreach 循环处理多个文件上传

①函数is_uploaded_file()

该函数判断指定的文件是否是通过HTTP POST上传的,如果是则返回TRUE。用于防止潜在的攻击者对原本不能通过脚本交互的文件进行非法管理,这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如/etc/passwd。此函数的原型如下所示:

bool is_uploaded_file(string) //判断指定的文件是否是通过HTTP POST上传的

为了能使此函数正常工作,唯一的参数必须指定类似于$_FILES['userfile']['tmp_name']的变量,才能判断指定的文件确实是上传文件。如果使用从客户端上传的文件名$_FILES['userfile']['name']则不能正常运作。

PHP上传文件大小限制解决方法:

第一:在php.ini里面查看如下行:

upload_max_filesize = 8M
post_max_size = 10M
memory_limit = 20M
把这些值改成我所说的,看看有没有问题,另外要确认上传的 <form> 里没有类似下面的这行<input type="hidden" name="MAX_FILE_SIZE" value="500000">这样也是限制上传大小用的。

第二:如果是apache 2 需要修改
/etc/httpd/conf.d/php.conf
中的LimitRequestBody 524288将524288(=512×1024)改大,比如5M(=5×1024×1024)这样上传就不会出现如上问题,上传不响应,上传现实该页无法现实也将得到解决!

时间: 2024-10-12 16:02:43

PHP对文件上传的处理方法的相关文章

fckeditor在jsp文件上传失败解决方法

fckeditor在jsp教程文件上传失败解决方法 我的代码如下 web.xml <servlet> <servlet-name>connector</servlet-name> <servlet-class>net.fckeditor.connector.connectorservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet&g

php 多文件上传的处理方法

php教程 多文件上传的处理方法 关于多文件上传我们讲过很多了,下面是一个简单的普通form多文件上传类了,需要的朋友可以下载试用一下. <?php           class upload {              public $up_ext=array(), $up_max=5210, $up_dir;              private $up_name, $up_rename=true, $up_num=0, $up_files=array(), $up_ret=arra

php中关于普通表单多文件上传的处理方法

然而有些情况只需要传递几个文件,而且文件体积并不太大,这种情况下使用组件则有点牛刀杀鸡的感觉,通过html自带的<input type="file">表单就可以实现需要的功能,关键在于后台接收程序的处理. php处理上传做的很方便,上传文件的信息通过服务器自动处理到$_FILES数组中,开发者只需要使用的内置处理函数简单操作就可以啦.ASP开发者则没有这么幸运,官方并没有提供直接的处理方法,需要开发者自己设计,这时就需要开发者了解IIS对enctype="mult

php中关于普通表单多文件上传的处理方法_php技巧

然而有些情况只需要传递几个文件,而且文件体积并不太大,这种情况下使用组件则有点牛刀杀鸡的感觉,通过html自带的<input type="file">表单就可以实现需要的功能,关键在于后台接收程序的处理. php处理上传做的很方便,上传文件的信息通过服务器自动处理到$_FILES数组中,开发者只需要使用的内置处理函数简单操作就可以啦.ASP开发者则没有这么幸运,官方并没有提供直接的处理方法,需要开发者自己设计,这时就需要开发者了解IIS对enctype="mult

php文件上传简单实现方法_php技巧

本文实例讲述了php文件上传的简单实现方法.分享给大家供大家参考.具体如下: 文件1:index.php 复制代码 代码如下: <form enctype="multipart/form-data" action="uploadProcess.php" method="post" name="myform"> 用户名:<input type="text" name="userna

fckeditor文件上传路径修改方法

VS打开FCK项目,打开文件"FCKeditor.Net_2.6.3FileBrowserFileWorkerBase.cs" 找到这行 C# code // Map the virtual path to the local server path. string sServerDir = this.ServerMapFolder( resourceType, currentFolder, isQuickUpload ); //如果不关心按类型存放文件的话,FCK把类型分为image

Asp中文件上传,fso方法大全

  方法:BuildPath 语法:对象名.BulidPath(路径,文件名) 说明:在路径上添加文件名,如果有需要的话,会自动加上分隔符. 方法:CopyFile 语法:对象名.CopyFile(源路径,目标路径[,是否覆盖]) 说明:将一个或多个文件从源位置复制到目标位置.源位置支持通配符,如果目标路径最后字符为则认为目标路径是目录, 是否覆盖参数默认值为TURE,如果目标位置文件已经存在,而是否覆盖属性设置为FALSE的话会出错.(关于是否覆盖参数的说明其它各处皆同) 方法:CopyFol

asp.net网站中大文件上传的处理方法

问题描述 现在在做一个网站,想要把视频,图片,ppt等文件资源上传到文件夹中,怎么处理啊,用Fileupload用大小限制,用第三方组件不兼容windows7系统,还有iis配置的问题,然后想把大的文件切割成小的一块一块的在上传,这个方法行的通吗,怎么实现 解决方案 解决方案二:SWFUpload应该可以的,采用的是Flash上传,浏览器一般都是支持的利用Flash上传大文件:swfupload修改以及详细说明http://www.cnblogs.com/rexying/archive/2009

python实现ftp文件上传到服务器方法

 代码如下 复制代码 #!/usr/bin/env python2 # coding: utf-8 import os,socket,threading,time #import traceback allow_delete = False local_ip = socket.gethostbyname(socket.gethostname()) local_port = 8888 currdir=os.path.abspath('.') class FTPserverThread(thread