PHP.INI配置:文件上传功能配置

原文地址

去年暑假做到一个关于大文件上传的项目,当时在php.ini配置上耽误了不少时间,以及前段时间提起这次项目,当问及到php.ini的配置问题时,知道怎么配置,但是几个配置选项的确切名字说不上来啊,很尴尬,平时一直尝试去记,呵呵。今天就好好说一下在利用PHP实现文件上传功能时几点关键php.ini的配置。

首先引入几个配置选项

 

名称  意义
upload_max_filesize  上传大小
post_max_size   POST字节长度
max_execution_time  最大执行时间
memory_limit  内存限制

 表 1. php.ini 中与资源相关的设置

设置 描述 建议值
max_execution_time 一个脚本可使用多少 CPU 秒 30
max_input_time 一个脚本等待输入数据的时间有多长(秒) 60
memory_limit 在被取消之前,一个脚本可使用多少内存(字节) 32M
output_buffering 数据发送给客户机之前,有多少数据(字节)需要缓存 4096

具体数字主要取决于您的应用程序。如果要从用户处接收大文件,那么 max_input_time 可能必须增加,可以在 php.ini 中修改,也可以通过代码重写它。与之类似,CPU 或内存占用较多的程序也可能需要更大的设置值。目标就是缓解超标程序的影响,因此不建议全局禁用这些设置。关于 max_execution_time,还有一点需要注意:它表示进程的 CPU 时间,而不是绝对时间。因此一个进行大量 I/O 和少量计算的程序的运行时间可能远远超过 max_execution_time。这也是 max_input_time 可以大于 max_execution_time 的原因所在

 

  PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项。

  php.ini中文件上传功能配置选项说明

  打开php.ini配置文件找到File Uploads

  file_uploads = On

  默认允许HTTP文件上传,此选项不能设置为OFF。

  upload_tmp_dir =

  默认为空,此选项在手动配置PHP运行环境时,也容易遗忘,如果不配置这个选项,文件上传功能就无法实现,这个选项设置的是文件上传时存放文件的临时目录,你必须给这个选项赋值,比如upload_tmp_dir =’/leapsoulcn’,代表在C盘目录下有一个leapsoulcn目录,和session配置一样,如果你是在linux环境下,你必须赋予这个目录可写权限。

  如何上传超过8M的大文件?

  上传大文件主要涉及配置upload_max_filesizepost_max_size两个选项。

  php.ini配置文件中的默认文件上传大小为2M,php初学者容易犯的一个错误是在编写文件上传功能时通过设置上传文件最大大小的表单区域,即允许上传文件的最大值,max_file_size(隐藏值域)的值来规定上传文件的大小,其实一般别人可以绕过这个值,所以安全起见,最好是在php.ini配置文件中配置upload_max_filesize选项,设定文件上传的大小。

  默认upload_max_filesize = 2M,即文件上传的大小为2M,如果你想上传超过8M的文件,比如20M,你必须设定upload_max_filesize = 20M。

  但是光设置upload_max_filesize = 20M还是无法实现大文件的上传功能,你必须修改php.ini配置文件中的post_max_size选项,其代表允许POST的数据最大字节长度,默认为8M。如果POST数据超出限制,那么$_POST和$_FILES将会为空。要上传大文件,你必须设定该选项值大于upload_max_filesize指令的值,我一般设定upload_max_filesize和post_max_size值相等。另外如果启用了内存限制,那么该值应当小于memory_limit选项的值。

  文件上传的其他注意事项

  在上传大文件时,你会有上传速度慢的感觉,当超过一定的时间,会报脚本执行超过30秒的错误,这是因为在php.ini配置文件中max_execution_time配置选项在作怪,其表示每个脚本最大允许执行时间(秒),0 表示没有限制。你可以适当调整max_execution_time的值,不推荐设定为0。

  至此,在php.ini配置文件中对文件上传选项进行配置的PHP教程就介绍完毕了,通过上面的步骤实践与学习,再结合PHP程序,文件上传功能就可以实现了。

  其他的php.ini选项

 

  display_errors = Off [安全]

 

magic_quotes_gpc = Off [性能]

不将输入的数据用反斜杠进行转义,以便发送给数据库时不需要更多的处理。

事实上,你应该对每一个发送到数据库的输入数据使用addslashes()函数。

error_reporting = E_ALL [代码清洁,安全]

默认情况下,PHP错误报告等级是E_NOTICE

E_ALL表示报告所有非致命错误,因为这些错误可能会导致大问题(比如使用了未定义的变量)。

魔术引号(自动字符串转义)

magic_quotes_gpc = On

在输入的GET/POST/Cookie数据里使用自动字符串转义【比如,值 (It's "PHP!") 会自动转换成 (It\'s \"PHP!\")】

这里的设置自动影响$_GEST,$_POST,$_COOKIE数组的值。如果打开,值 (It's "PHP!") 会自动转换成 (It\'s \"PHP!\")。

 variables_order = "EGPCS"

 PHP注册 GET, POST, Cookie, Environment, Built-in 变量的顺序。

 (以 G, P, C, E, S 表示,通常以 EGPCS 或 GPC 或 ES 的方式引用)。

 按从左到右记录,新值覆盖旧值。

 举例说,将其设为"GP",会导致 PHP 完全忽略环境变量、cookies 、server

 并用 GET 方法的变量覆盖 POST 方法的同名变量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值