php设置文件大小
A. 怎么用php实现文件的上传,要求文件类型为jpg,大小不超过2m,上传的文件存放在u
$_FILES官方文档
你可以看看官方的$_FILES文档,里面有对$_FILES的内容的解释。
想通过PHP来处理文件信息就得通过$_FILES的内容来处理,比如文件类型可以用type来判断,要求文件类型为jpg,那就判断if ($_FILES['file1']['type'] === 'image/jpeg'),这里的file1并不是绝对的,视情况而定。
当然如果你觉得判断类型太麻烦,你也可以直接从name中判断后缀名,自己将文件名分割一下就好了。大小可以用size,默认单位是字节,不超过2M就要除以1024*1024了,可以将字节转换到兆字节。
要将上传的文件放在U目录下,就用move_uploaded_file函数来解决,move_uploaded_file官方文档
B. PHPstudy修改上传文件限制大小限制的方法
越来越多的童鞋在使用PHPstudy来搭建网站, ,PHPstudy搭建php+mysql的网站还是非常不错的,主要就是可以随意切换php版本,但是不少童鞋在用php程序上传文件时候,默认限制的只能上传2M大小的文件,在这里说下如何修改这个上传限制大小。
总共修改三个地方
post_max_size
max_execution_time
max_input_time
下图所示
打开修改这三个里面的值,不知道修改成多少的,直接在原有数字后面加个0即可,一般够用了
C. 用PHP写上传资源的代码是上传大文件,例如300M的文件,再不改php.ini设置的情况下,有没有一种用代码修改
可以,利用php里面的函数ini_set(),ini_set参数格式为ini_set($var,$value),$var是你要设置的配置选项,$value是你要修改的值。
D. 如何设置apache+php的上传文件大小上限
完整修改步骤:
1.修改Apache设置
在httpd.conf 加一句(随便加哪都行) LimitRequestBody 10240000(这个数字多大都可以,我设的上限是10M)
2.修改PHP设置
相关的设置有如下几个,但是我只改了其中的post_max_size
(下面的内容是直接粘第一篇文章里的)
打开php.ini, Ctrl+F 找到下面的项并修改之。下面以上传100M为例。
file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize = 100m ;望文生意,即允许上传文件大小的最大值。默认为2M
post_max_size = 100M ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
一般地,设置好上述四个参数后,上传<=8M的文件是不成问题,在网络正常的情况下。
但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得关心关心下面的参数:
max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 128M ;每个PHP页面所吃掉的最大内存,默认8M
希望可以采纳,谢谢。
E. 如何修改PHP上传文件大小限制
1. 在php.ini中,做如下修改:
file_uploads = on
upload_tmp_dir = /home/upload
upload_max_filesize = 4000M
post_max_size = 4000M
一般地,设置好上述四个参数后,上传<=8M的文件是不成问题,在网络正常的情况下。
但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得关心关心下面的参数:
max_execution_time = 600
max_input_time = 600
memory_limit = 128M
2. 在要确认上传的 <form> 里加入以下行:
<input type="hidden" name="MAX_FILE_SIZE" value="4000000000">
3. $_FILES["userfile"]["error"]返回值说明:
$_FILES['teacher_pic']['error'] = 1 文件大小超过了PHP.ini中的文件限制
$_FILES['teacher_pic']['error'] = 2 文件大小超过了浏览器限制
$_FILES['teacher_pic']['error'] = 3 文件部分被上传
$_FILES['teacher_pic']['error'] = 4 没有找到要上传的文件
$_FILES['teacher_pic']['error'] = 5 服务器临时文件夹丢失
$_FILES['teacher_pic']['error'] = 6 文件写入到临时文件夹出错
$_FILES['teacher_pic']['error'] = -1 末充许的类型
$_FILES['teacher_pic']['error'] = -2 文件过大,上传文件不能超过{$this->maxSize}个字节
$_FILES['teacher_pic']['error'] = -3 上传失败
$_FILES['teacher_pic']['error'] = -4 建立存放上传文件目录失败,请重新指定上传目录
$_FILES['teacher_pic']['error'] = -5 必须指定上传文件的路径
F. php上传问题 在上传不成功的情况下,当上传文件大于10M(大概数)时就会报错,而不是根据程序提示,
你说的10M应该是php.ini里设置的上传文件大小限制,而你这个switch判断是基于表单上传文件大小来判断的,两者毫无相关!
一、超过10M,在php底层处理请求时就直接报错了,根本执行不到你switch的地方,所以报错是非预期的
二、超过2M,php能正常执行,所以会按照你switch来报错
这里,你要搞清楚php的上传文件大小限制跟form表单上传文件大小限制的关系
G. 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,意思是接收文件的最大尺寸。文档中给出的例子如下:
<form enctype=”multipart/form-data” action=”_URL_” method=”POST”>
<input type=”hidden” name=”MAX_FILE_SIZE” value=”30000″>
Send this file: <input name=”userfile” type=”file”>
<input type=”submit” value=”Send 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会不会也有这种情况。
H. 如何通过配置php文件限制上传文件的大小
在网站开发的过程中,为了确保能够充分利用服务器的空间,在开发上传功能时,必须对上传文件的大小进行控制。那么我们如何进行对上传文件的大小进行控制呢?
控制文件的大小可以从两个方面入手:
第一个是在PHP的配置文件php.ini中对上传文件进行控制,如果上传文件超过它指定的范围,那么执行上传就会识别。
第二个是在PHP配置文件允许的范围内,在程序中对上传文件的大小进行控制!
一:通过配置文件控制上传文件
PHP中通过php.ini文件对上传文件进行控制,包括是否支持上传,上传文件的临时文件目录,上传文件的大小,指令执行时间,指令分配的内存空间。
在php.ini中,定义 File Uploads项,完成对上传相关选项的设置。上传相关选项的含义如下:
file_uploads:如果值是 no,说明服务器支持上传文件,如果为off ,那么则不支持。一般默认是支持的,这个不用修改!
upload_tmp_dri:上传文件临时目录。文件被成功上传之前,文件首先存放到服务器端的临时目录中。多数使用系统默认目录,但是也可以自行设置!
upload_max_filesize:服务器允许上传文件的最大值,以MB为单位,系统默认为2MB,如果网站需要上传超过2MB的数据,那么就要修改这个值!
上述是php.ini中 File_Uploads项中与上述相关参数设置说明,除了File_Uploads项中的内容外,在php.ini中还有其他几个选项会影响到文件的上传~
max_execution_time:PHP中一个指令所能执行的最大时间,单位为秒。该选项在上传超大文件时必须要修改,否则即使上传文件在服务器允许的范围内,但是若超过了指令所能执行的最大时间,仍然无法实现上传~
memory_limit:PHP中一个指令所分配的内存空间,单位是 MB 。它的大小同样会影响得到超大文件的上传!
二:在程序中控制上传文件
在客户端控制上传文件应用的是 form 表单中的 enctype 和 method属性以及隐藏域 MAX_FILE_SIZE。
enctype = “multipart/form-data”:指定表单编码数据方式。
method = “post”:指定数据的传输方式。
<input type = "hidden" name="MAX_FILE_SIZE" value=“10000”/>:通过隐藏域控制上传文件的大小(单位为字节),该值不能超过php.ini配置文件中 upload_max_filesize 选项设置的值,它不能喝完全控制上传文件的大小。只是可以避免一些不必要的麻烦。
技巧:
在应用隐藏域<input type = "hidden" name="MAX_FILE_SIZE" value=“10000”/>控制文件上传大小时,必须将其放置在文件域之前,否则是不能发挥作用的!