PHP中,上传/下载文件的限制


今天遇到一个问题,用php输出文件时,只要文件大小超过60MB就不能输出。最后找到解决办法如下:(主要原因是memory_limit不够用了。)

在PHP中,上传文件是一个比较常用的操作。有些情况下,会出现文件上传超时、过大、无法上传等问题。当这些问题发生的时候,可能是代码逻辑的问题,但是,你想过是系统的问题吗?

下面,在这里列举一些在PHP中和文件上传相关联的参数:

max_execution_time:脚本最大执行时间。可以使用set_time_limit()函数来进行更改,单位是秒。在网速不佳的情况下,可能会出现上传文件出现超时,这个时候就应该尝试更改这个参数了。
max_file_uploads:允许上传的最大文件数。可曾有过制作相册的时候,一次性上传文件数量太多(如100),结果只能上传一部分(如20)的情况?这个时候就需要对这个参数进行设置了。
memory_limit:内存限制。当这个限制了一个值,例如10M,那么你就无法上传大于10M的文件或者总和大于10M的文件;同样的,你也不能用文件系统函数来读取大于10M的文件了。如果你使用的是readfile()等机制来下载文件,那可就要注意了。
post_max_size:允许最大的POST尺寸。众所周知,文件是通过POST上传的,当这个值小的时候,你上传的文件也不能大到哪里去。
upload_max_filesize:允许最大的上传文件尺寸。这个嘛,就不用多说了吧。

也就是说,影响文件上传的大小的参数有:memory_limit,post_max_size,upload_max_filesize这3个,当这3个处于不同的值的时候,就会以最小的值为准。影响下载文件(特指readfile等方式)的大小,就是memory_limit了。最后提醒一点:处理的文件太大时,记得保证要有足够的脚本执行时间。在不更改PHP.ini文件的情况下,通过int_set()函数就能轻易修改这些参数了,当然,部分主机商会禁用这个函数。格式如下:ini_set(‘memory_limit’,104857600),第二个参数值的单位是:字节。
http://blog.csdn.net/xiunai78/article/details/7246249

Archives