php 文件上传注意事项

对 MAX_FILE_SIZE 设置的值,不能大于 ini 设置中 upload_max_filesize 选项设置的值。其默认值为 2M 字节。

 upload_max_filesize上传文件的最大大小 


如果内存限制设置被激活,可能需要将 memory_limit 设置的更大些,请确认 memory_limit 的设置足够的大。

memory_limit 这将设置允许脚本分配的最大内存量(以字节为单位)。这有助于防止编写糟糕的脚本占用服务器上的所有可用内存。请注意,要没有内存限制,请将此指令设置为-1。 在PHP 5.2.1之前,为了使用该指令,必须在编译时通过在配置行中使用--enable-memory-limit来启用它。还需要此编译时标志来定义5.2.1之前的函数memory_get_usage()和memory_get_peak_usage()。 当使用整数时,其值以字节来衡量。还可以使用在FAQ中描述的速记符 

如果 max_execution_time 设置的值太小,脚本运行的时间可能会超过该设置。因此,也请保证 max_execution_time 足够的大。

max_execution_time  这设置了脚本被解析器中止之前允许的最大执行时间,单位秒。 这有助于防止写得不好的脚本占尽服务器资源。 默认设置为 30。 从命令行运行 PHP 时,默认设置为 0。最大执行时间不会影响系统调用和系统操作等。更多细节参见 set_time_limit()。在 安全模式 下你不能通过 ini_set() 来修改此设置。 唯一的解决方法是关闭安全模式或者在 php.ini 中修改时间限制。你的 web 服务器也可以有其他超时设置,也有可能中断 PHP 的执行。 Apache 有一个 Timeout 指令,IIS 有一个 CGI 超时功能。 他们默认都是 300 秒。更多具体信息参见你的 web 服务器的文档。 

Note: max_execution_time 仅仅只影响脚本本身运行的时间。任何其它花费在脚本运行之外的时间,诸如用函数 system() 对系统的调用、sleep() 函数的使用、数据库查询、文件上传等,在计算脚本运行的最大时间时都不包括在内。

Warning

max_input_time

以秒为单位设定了脚本接收输入的最大时间,包括文件上传。对于较大或多个文件,或者用户的网速较慢时,可能会超过默认的 60 秒。

如果 post_max_size 设置的值太小,则较大的文件会无法被上传。因此,请保证 post_max_size 的值足够的大。

 post_max_size 设置允许的后期数据的最大大小。此设置也会影响文件上载。要上传大文件,此值必须大于upload_max_filesize。一般来说,memory_limit应该大于post_max_size。如果发布数据的大小大于post_max_size,则$ _POST和$ _FILES超全局变为空。如果使用整数时,其值以字节来衡量。还可以使用在FAQ中描述的速记符。这可以以各种方式跟踪,例如,通过将$ _GET变量传递给处理数据的脚本,即,然后检查是否设置了$ _GET ['processed']。 

不对正在操作的文件进行验证可能意味着用户能够访问其它目录下的敏感信息。

请注意 CERN httpd 似乎会丢弃它从客户端获得的 content-type mime 头信息中第一个空格后所有的内容,基于这一点,CERN httpd 不支持文件上传特性。

鉴于文件路径的表示方法有很多种,我们无法确保用使用各种外语的文件名(尤其是包含空格的)能够被正确的处理。

开发人员不应将普通的输入字段和文件上传的字段混用同一个表单变量(例如都用 foo[])。