php上传问题 在上传不成功的情况下,当上传文件大于10M(大概数)时就会报错,而不是根据程序提示,

你说的10M应该是php.ini里设置的上传文件大小限制,而你这个switch判断是基于表单上传文件大小来判断的,两者毫无相关!
一、超过10M,在php底层处理请求时就直接报错了,根本执行不到你switch的地方,所以报错是非预期的
二、超过2M,php能正常执行,所以会按照你switch来报错

这里,你要搞清楚php的上传文件大小限制跟form表单上传文件大小限制的关系

php检测上传文件大小的问题~

在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下:
1、php.ini:upload_max_filesize 所上传的文件的最大大小。默认值2M。

2、php.ini:memory_limit 本指令设定了一个脚本所能够申请到的最大内存字节数,默认值8M。如果不需要任何内存上的限制,必须将其设为 -1。如果内存不够,则可能出现错误:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)

3、php.ini:post_max_size 设定POST数据所允许的最大大小。此设定也影响到文件上传。要上传大文件,该值必须大于 upload_max_filesize。

4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds

5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data

6、如果用到mysql的BLOB进行二进制文件存储,则需要设置my.ini:max_allowed_packet=xxM

7、httpd.conf
在 Apache 里面有一个选项是 LimitRequestBody,这个选项可以限制用户送出的 HTTP 请求内容。这个选项可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 内使用,分别可以用在 virtualhost 或目录属性设定。而 LimitRequestBody 的设定值是介乎 0 (无限制) 至 2147483647 (2GB)。
例如要在目录 D:/AppServ/www 设定上传限制为 100K,可以在 .htaccess 或 httpd.conf 加入以下语句:


LimitRequestBody 1024000000
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all


LimitRequestBody 1024000000Options Indexes FollowSymLinks MultiViews ExecCGIAllowOverride AllOrder allow,denyAllow from all


如果透过 .htaccess 设定,储存档案后会立即生效;如透过 httpd.conf 设定,须要重新启动 Apache。
PHP关于文件上传部分,特别提到表单隐藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文档中给出的例子如下:





Send this file:

form>


Send this file:



这里设置MAX_FILE_SIZE = 30000,期待一种可能,使得浏览器在传送文件之前能够依此作出预先判断,如果文件尺寸大于30000字节,则不执行实际的POST动作。也就是不往服务器发送文件内容,而是直接在客户端提醒用户“你试图上传的文件超过30000字节”。
这的确是一个非常棒的主张,但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”,而是IE和FireFox这两个主流浏览器都不支持这个特性。PHP的这个建议尚未被采纳。

MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果超出,$_FILES['thisfile']['error']会被设置为UPLOAD_ERR_FORM_SIZE(2),同时放弃保存临时文件,将$_FILES['thisfile']['size']置0。
这个例子,没问题,表现正常,当我试图上传一个40多K的文件时,PHP程序报告“文件超过MAX_FILE_SIZE”。
但是,如果我们将表单中的MAX_FILE_SIZE从30000减少到1000,情形又如何呢?

上传800字节的文件,正常;
上传40K的文件,PHP报告文件过大,也正常;
上传3000个字节的文件,PHP未报告错误,它成功保存了文件!出乎意料!

问题就出在main/rfc1867.c中判断文件是否超长的这部分代码上。php每次从buffer中读取FILLUNIT字节长度的内容后,首先判断“已经读到的内容长度(total_bytes)”是否大于MAX_FILE_SIZE,然后再增加“已经读到的内容长度(total_bytes)”。这样一来,和预计的结果之间至多会有FILLUNIT字节的误差,而FILLUNIT=1024*5=5K。(点击bug了解详细内容)
这就是说,当MAX_FILE_SIZE<5K时,上传一个大于MAX_FILE_SIZE,但是小于5K的文件是没有问题的。
当然,因为这个设置很容易被绕过,所以服务器端编程不应当依赖于MAX_FILE_SIZE。而且,5K到底是个很小的数值,对大多数上传文件的表单来说没有影响。
PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的设置,和客户端上传给服务器端的流量大小无关。
Apache服务器从客户端接收长度不超过LimitRequestBody字节数的请求,然后传送给php模块,php模块再决定是否保存成临时文件,设置$_FILES全局变量,移交给script进一步处理。
这个Apache的LimitRequestBody选项缺省值=0,允许Request body的最大字节数是2G(Linux + Apache)
最后还要注意的是:
html本身能够post数据也是有限制的,不能超过2G。
FTP客户端有文件偏移指针的2GB边界限制,未使用特殊编译flag编译的ftp服务器端或者客户端,无论在什么FS中都不支持大于2GB的文件。不知道PHP会不会也有这种情况。

表示 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
所以你需要修改php.ini 的配置,然后重启你的web服务器
php手册:
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,没有文件被上传
UPLOAD_ERR_NO_TMP_DIR
其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
UPLOAD_ERR_CANT_WRITE
其值为 7,文件写入失败。PHP 5.1.0 引进。

#13476736084# 文件上传不成功是什么原因? - ******
#闵娄# 看看邮件是不是太大了 另一方面可能是网络原因 在试试也许就行了

#13476736084# php 图片上传不成功 谁帮忙看一下? - ******
#闵娄# 看了一下,代码没什么问题,这样检查一下1表单是否有enctype="multipart/form-data"<form action="upload_file.php" method="post" enctype="multipart/form-data">2 name是否是postfile<input type="file" name="postfile" />3在php打印$picName,看是否正确 祝君好运

#13476736084# 为什么修改了php.ini后上传文件还是失败? - ******
#闵娄# 上次文件除了你设置的那些参数以为,还取决于网页端的页面设置.在form表单中有项隐藏项<input type="hidden" name="MAX_FILE_SIZE" value="10485761" /> 该项允许上传的最大文件为10M 另外由于上传10M的文件一般需要花很长时间,所以在php.ini中设置脚本执行时间也要注意,尽量设置得长一些,不然文件还没传好,脚本执行时间超过了,也会报错.脚本时间参数:max_execution_time 还有上传文件由于会用到内存,因此在php.ini内给脚本分配的内存也要超过10m 内存设置参数:memory_limit 如果还是不行,请把你的错误结果贴出来.

#13476736084# php 文件上传,移动失败 - ******
#闵娄# 你饶了好大一圈.is_uploaded_file这个步骤是没有必要的,因此也就不用str_replace了.move_uploaded_file内部已经包含了is_uploaded_file的判断,手册上有提到,无法使用move_uploaded_file移动非upload的文件.

#13476736084# php文件上传音频,文档,图片都成功了,为什么上传视频不成功?谁能帮帮我啊! - ******
#闵娄# 文件大小是不是超了,PHP默认上传文件大小有限制,在php.ini文件里有配置:file_uploads = On ;打开文件上传选项 upload_max_filesize = 500M ;上传文件上限 你先检查下这个有没有超.或者不能上传具体表现是什么呢?是接收不到?还是下载下来以后不能打开?可以再具体下你的问题

#13476736084# PHP 上传错误了!!求助!!! ******
#闵娄# 首先您提供的代码就不对,应该提供\down\admin\filephome.php 这个文件,第二,如果以450kBps,那么上传的理论极限最大容量不超过131MB,但是PHP在服务器端的配置文件规定了上传最大文件,并且您的网络连接也不太容易达到450...

#13476736084# php上传怎么解决中文文件夹的问题?当遇到中文文件夹的时候文件就上传不了 - ******
#闵娄# 解决方法: 点击“管理服务器--服务器限制和设置”,在“FTP设置”中,找到“OPTS UTF8”并禁用它,然后在底部有一个“全局属性”,打开后选择“高级选项”,把 “对所有已收发的路径和文件名使用UFT-8编码”前面的勾去掉,就是说不使用UTF-8编码了.设置后,重新启动FTP服务器,或者干脆重启计算机.

#13476736084# php编写表单提交时总显示上传失败 - ******
#闵娄# 把 这句去了,在php里判断大小吧.

#13476736084# php上传图片问题.总是上传失败! - ******
#闵娄# 一是路径问题,而是图片的格式,三是如果你在linux的话,那就不支持中文格式,一般就是这几种情况,你看看你属于那一种就行

#13476736084# php做的上传图片网页上传不成功 - ******
#闵娄# 权限问题,把上传目录改为php用户可写,或者偷懒改为everyone可写

为传递更多家电数码信息,若有事情请联系
数码大全网