文章标签 » apache

影响PHP文件上传大小限制的参数

__WIKI__
=PHP=
==[http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize upload_max_filesize]==
最直接影响的参数,上传文件的最大尺寸,默认为2M
==[http://www.php.net/manual/en/ini.core.php#ini.post-max-size post_max_size]==
POST数据的最大尺寸,默认8M。由于文件上传是通过POST方式发送的,所以post_max_size必须比upload_max_filesize x 最大同时上传文件数大
==[http://www.php.net/manual/en/info.configuration.php#ini.max-input-time max_input_time]==
解析从http server接收数据的最大时间,默认-1,没有限制,如果设置了超时则在处理大文件时很可能会超时
==[http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time max_execution_time]==
脚本的最大运行时间,默认30秒,如果要接收大文件可以通过[http://www.php.net/manual/en/function.set-time-limit.php set_time_limit]设置一个较长的时间
==[http://www.php.net/manual/en/ini.core.php#ini.memory-limit memory_limit]==
运行内存限制,默认128M,如果开启了内存限制,则memory_limit的值也要比post_max_size大
=Apache=
==[http://httpd.apache.org/docs/current/mod/core.html#limitrequestbody LimitRequestBody]==
限制http请求body大小,假如设置了限制,则参考php的post_max_size
==[http://httpd.apache.org/docs/2.0/mod/core.html#timeout TimeOut]==
此参数限制了接收请求的最大时间,如果上传大文件,可以合理增加时间
=Nginx=
==[http://wiki.nginx.org/HttpCoreModule#client_max_body_size client_max_body_size]==
限制http请求body大小
==[http://wiki.nginx.org/HttpCoreModule#client_body_timeout client_body_timeout]==
上传超时时间
==[http://wiki.nginx.org/HttpFastcgiModule#fastcgi_read_timeout fastcgi_read_timeout]==
fastcgi输出超时时间
=PHP.fpm=
==[http://www.php.net/manual/en/install.fpm.configuration.php request_terminate_timeout]==
参照max_execution_time

=参考=
[http://www.radinks.com/upload/config.php]

[http://www.villescorner.com/2012/02/nginx-php-fpm-file-upload-battle.html]

一段指定附件下载名的apache配置

继续优化

SetEnvIf Request_URI "\/SAVE\/(.*)$" save_file_name="$1"
SetEnvIf Request_URI "\.(jpg|jpeg|png|gif|bmp)$" is_image_file
#除了图片,其他文件直接访问均提示下载,防止上传了js,css,html等不应该被浏览器加载的文件
Header set Content-Disposition attachment env=!is_image_file
Header set Content-Disposition "attachment; filename=%{save_file_name}e" env=save_file_name
RewriteEngine On
RewriteRule ^/(.*)\/SAVE\/.*$ /$1 [L]

——————————————————-
优化一下~

SetEnvIf Request_URI "\/SAVE\/(.*)$" save_file_name="$1"
Header set Content-Disposition "attachment; filename=%{save_file_name}e" env=save_file_name
RewriteEngine On
RewriteRule ^/(.*)\/SAVE\/.*$ /$1 [L]

只需要访问 : ….5_1300238850.jpg/SAVE/我的图片.jpg 就可以了,ie下文件名后面竟然也不会出现“[1]”了~
—————————————-

SetEnvIf Request_URI "_DOWN_NAME_(.*)_DOWN_EXT_(.*)$" save_file_name="$1.$2"
#下面这种ie下有问题
#SetEnvIf Request_URI "_DOWN_NAME_(.*)$" save_file_name="$1"
Header set Content-Disposition "attachment; filename=%{save_file_name}e" env=save_file_name
RewriteEngine On
RewriteRule ^/(.*)\._DOWN_NAME_.*$ /$1 [L]

实现的效果:
假设一个附件上传后的地址是:
http://foo.com/03/21/1bc5b77f3e50b7fbe12c792ee438da45_1300688708.jpg

如果想要指定下载名,则访问:
http://foo.com/03/21/1bc5b77f3e50b7fbe12c792ee438da45_1300688708.jpg._DOWN_NAME_我的图片_DOWN_EXT_jpg

ie下的效果:
screenshot_127.png

chrome下的效果:
screenshot_128.png

FF下的效果,很杯具:
screenshot_129.png

———–
vim->email->wordpress

给apache添加一个动态模块

http://www.phpchina.com/manual/apache/programs/apxs.html

火星啊,可耻的重编流。。
/opt/apache/bin/apxs -c -i -a mod_proxy_connect.c

———–
post by gmail~

apache的REQUEST_FILENAME变量

老早之前就发现REQUEST_FILENAME不准的问题,当时对中文文档深信不疑。
中文文档

REQUEST_FILENAME
这是与请求相匹配的完整的本地文件系统的文件路径名。

英文文档

REQUEST_FILENAME
The full local filesystem path to the file or script matching the request, if this has already been determined by the server at the time REQUEST_FILENAME is referenced. Otherwise, such as when used in virtual host context, the same value as REQUEST_URI.

看完e文文档就明了了,原来REQUEST_FILENAME在虚拟主机配置上下文里是跟REQUEST_URI一样的。。