php文件上传详解
来源:互联网 发布:linux安装phpmyadmin 编辑:程序博客网 时间:2024/06/05 04:21
一、上传文件首先要在php.ini里按自己的需求进行相应配置。
有以下几个重要的配置单:
选项
默认值
说明
post_max_size
8M
控制以后的POST请求的最大规模。必须大于upload_max_filesize选项值。
max_input_time
60
指定一个POST请求提交所有数据可以花费的时间。以秒为单位。在此时间之后结束数据提交。
memory_limit
128M
一个脚本页所能消耗的最大内存。
max_execution_time
30
脚本最大执行时间。以秒为单位。
file_uploads
On
指出是否允许文件上传。默认值为on
upload_max_filesize
2M
控制PHP接受的最大文件规模。如果文件太大,PHP就写入一个0字节的占位符文件。
upload_tmp_dir
NULL
必须设置为一个有效目录。可以将上传的文件放在这里等候处理。
1. 一般的php文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完.
但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行.
这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time
在php.ini里查找
max_execution_time
默认是30秒.改为
max_execution_time = 0 0表示没有限制
以上修改的是php上传文件中脚本执行超时时间
2. 修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到php上传文件。
php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便会为空.
查找 post_max_size .改为
post_max_size = 150M
3. 很多人都会改了第二步.但php上传文件时最大仍然为 8M.
为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大大小。
查找upload_max_filesize,默认为8M改为
upload_max_filesize = 100M
另外要说明的是在php文件上传中,post_max_size 大于 upload_max_filesize 为佳.
二、在HTML表单中设置上传
需要注意三个地方:
- 将form表单提交方式设为POST
- 添加一个“file”类型的<input>标签(如果是多文件上传,添加多个)
- 将enctype属性添加到表单中,表示将使用新的multipart/form-data MIME类型。
提交数据以后,服务器通过超级全局数组$_FILES访问提交的文件。这个数组包含的元素个数为表单file个数相同。例如:如果表单里有一个上传文件的选框:
<input type=”file” name=”filename”>
当提交数据后,可以通过$_FILES[‘filename’]来取得这个文件的信息。该信息如下:
$_FILES[‘filename’]:
[‘name’] => 文件名
[‘type’] => 文件MIME类型。如image/jpeg, text/plain, application/octet-stream等。
[‘tmp_name’] => 如果文件小于允许上传文件大小,则该位置表示上传的文件临时存放路径及临时文件名,被放在upload_tmp_dir所指定的位置。
[‘error’] => 错误代码。
[‘size’] => 文件大小。
其中error错误代码可能的值如下表:
编码
值
说明
UPLOAD_ERR_OK
0
文件成功上传
UPLOAD_ERR_INI_SIZE
1
文件大小比php.ini中upload_max_filesize指定值要大
UPLOAD_ERR_FORM_SIZE
2
文件的 小比表单的MAX_FILE_SIZE指定的值大
UPLOAD_ERR_PARTIAL
3
文件上传不完整(可能因为请求时间过长被终止)
UPLOAD_ERR_NO_FILE
4
没有文件随着这个请求上传
UPLOAD_ERR_NO_TMP_DIR
6
在php.ini中没有指定临时文件夹
只有当$_FILES[‘filename’][‘error’]的值为0时,才应该继续处理文件。
单文件上传HTML结构示例:
<form action="" method="post" enctype="multipart/form-data"><p>File:<input type="file" name="filename" /><input type="submit" value="Send" /></p></form>
多文件上传HTML结构示例:
<form action="" method="post" enctype="multipart/form-data"><p>Files:<input type="file" name="filename[]" /><input type="file" name="filename[]" /><input type="file" name="filename[]" /><input type="submit" value="Send" /></p></form>
三、php服务端对数据进行处理
像文件大小和类型限制、分目录存储、文件信息入库等操作,都可以根据需要自行处理,这里给一个简单的例子:
include_once 'conn/conn.php';$filename = $_FILES['filename']['name'];//读取上传文件名,并存为数组$filetype = $_POST['foundtype'];//读取上传文件的类别$tmpname = $_FILES['filename']['tmp_name'];//读取临时文件名,并存为数组$tmpsize = $_FILES['filename']['size'];//上传文件大小$tmppub = $_POST['ispub'];//是否公开$file_path = 'upfile/';$max = 0;if(!is_null($tmpsize)){foreach($tmpsize as $value){$max += $value;}if($max > 100000000 or $max <= 0){echo '<script>alert("上传文件总大小大于100M,请重新选择1");location="'.$_SERVER['HTTP_REFERER'].'";</script>';}}else{/*var_dump($tmpsize);exit();*/echo '<script>alert("上传文件错误,请重新检查程序");location="'.$_SERVER['HTTP_REFERER'].'";</script>';}$chkdownnum = '';for($i = 0; $i < 15; $i++){$chkdownnum .= dechex(rand(0,15));}for ($i = 0; $i < count($filename); $i++){//通过循环将多个文件全部上传move_uploaded_file($tmpname[$i],$file_path.$filename[$i]);//添加进数据库$insertsql = 'insert into tb_upfile (filename,filepath,filetype,upauthor,chkdownnum,ispub) values("'.trim($filename[$i]).'","'.$file_path.$filename[$i].'","'.$filetype[$i].'","'.$_SESSION['name'].'","'.trim($chkdownnum).'",'.$tmppub[$i].')';$conne->uidRst($insertsql);}echo '<div style=" padding-top: 30px;">文件上传成功!</div>';
这里推荐几个蛮好用的jquery插件:
- php上传文件详解
- php文件上传详解
- php上传文件详解
- PHP文件上传详解
- php文件上传详解
- PHP文件上传详解
- PHP文件上传详解
- php上传文件详解
- PHP文件上传详解
- php文件上传详解
- PHP文件上传实例详解
- PHP文件上传实例详解!!!
- PHP文件上传实例详解!!!
- PHP文件上传实例详解!!!
- PHP上传文件详解 错误提示
- php 上传文件文件
- 水王复出:PHP文件上传实例详解!!!
- 【php网络 基础知识】详解get、post请求、文件上传
- 关于udelay(); mdelay(); ndelay(); msleep();
- 提高C++性能的编程技术(二)
- CppUnit在VS2010上的正确使用
- 层次结构查询
- cf_234/F Fence
- php文件上传详解
- linphone快速挂断后的程序崩溃问题
- spring 远路接口访问及集群方案
- CVS:版本控制的开放标准
- ViewPage 显示 部分 next 和 previous 的方法。
- Android异步处理系列文章
- puppet视频
- char和varchar2
- 集群相关