php中FILES的注意点
来源:互联网 发布:环刀法压实度软件 编辑:程序博客网 时间:2024/05/22 03:07
文件上传的html表单:
<
form
enctype="multipart/form-data" action="" method="POST">
<
input
type="hidden" name="MAX_FILE_SIZE" value="1000">
<
input
name="myFile" type="file">
<
input
type="submit" value="提交">
</
form
>
注意:enctype="multipart/form-data"这个是必须要写的,否则$_FILES数组是空的,得不到值.
$_FILES数组内容如下:
$_FILES['myFile']['name'] 客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但用 putenv() 函数设置是不起作用的。
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。
['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
UPLOAD_ERR_OK
值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE
值:4; 没有文件被上传。
值:5; 上传文件大小为0.
文件上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。
PHP中form表单中enctype属性的设置。
form表单中的enctype属性指定将数据发回到服务器时浏览器使用的编码类型。
下面是取值说明:
multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分,不对字符编码。当使用有文件上传控件的表单时,该值是必需的。。
application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。在发送前对所有字符进行编码(默认)。
text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符,邮件处理中用到,其他地方很少用。将空格转换为 "+" 符号,但不编码特殊字符。抓包可见数据形式。
说明:
1)如果表单中有文件要上传,表单中form标签必须设置enctype="multipart/form-data"来确保匿名上传文件的MIME编码。默认情况下,表单的编码格式是 application/x-www-form-urlencoded,不能用于文件上传;
2)进行session处理时,如果将表单设置enctype="text/plain",则通过$_POST,$_GET,$_REQUEST等是无法取到值的。这点一定要小心!!!
在做一个简单的表单上传测试时,服务端的PHP脚本中,$_FILES 数组为空;这样就不能获取从浏览器上传的信息.什么原因呢?
通过Google,找到下面这个 php上传文件$_FILES 数组为空的解决办法:
用php做上传文件的应用时,在后台打印$_FILES时发现为空数组,出现这个问题可能有以下两个原因:
表单类型原因或者php设置问题:
- 表单类型
上传文件的表单编码类型必须设置成 enctype=”multipart/form-data”,因为要传大数据,一般提交方式用POST - php设置问题:
php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size , $_POST 和 $_FILES 超全局变量便会为空. 解决的方法是:- 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完. 但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行. 这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time 在php.ini里查找 max_execution_time 默认是30秒.改为 max_execution_time = 0(可修改范围为PHP_INI_ALL) 0表示没有限制
或者在php文件头设置ini_set(‘max_execution_time’,0); - 修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到文件上传。 查找 post_max_size .改为 post_max_size = 150M(可修改范围为PHP_INI_PHP_INI_PERDIR)
- 很多人都会改了第二步.但上传文件时最大仍然为 8M. 为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大大小。 查找upload_max_filesize,默认为8M改为 upload_max_filesize = 100M(可修改范围为PHP_INI_PHP_INI_PERDIR)
另外要说明的是post_max_size是整个表达的大小,而upload_max_filesize是上传文件的大小,前者应大于后者.
- 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完. 但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行. 这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time 在php.ini里查找 max_execution_time 默认是30秒.改为 max_execution_time = 0(可修改范围为PHP_INI_ALL) 0表示没有限制
- php中FILES的注意点
- php中需要注意的几点
- PHP文件上传实现的注意点
- PHP文件上传实现的注意点
- PHP MVC架构注意的几点
- PHP 关于$ 的注意点 见一次注意一次
- php基础注意点
- php注意点
- php 注意点随记
- php 日期注意点
- php编程注意点
- 54点提高php编程效率的注意点
- PHP中常用函数以及若干注意点的说明(一)
- PHP中常用函数以及若干注意点的说明(二)
- PHP中常用函数以及若干注意点的说明(三)
- php漏洞与代码审计过程中需要注意的几点
- 关于JAVA中"+"的注意点
- Java中字符串比较的注意点
- Leetcode Candy
- 保持屏幕唤醒方法
- Android Wi-Fi Ethernet新IP获取机制—IpManager(Android 7.0)
- Android实战开发:获得屏幕物理尺寸、密度及分辨率
- Python range和xrange的区别
- php中FILES的注意点
- 多线程
- JavaScript中的小技巧和注意点(一)
- Android自定义控件:做一个拼图游戏
- 【C++】指针测试,单步调试,细观指针本身和指针变量所有变化
- Pandas数据特征分析
- EJB到底是什么
- 通过模拟浏览器获取cookies
- 基于Flume的美团日志收集系统(一)架构和设计