<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post/4961/</link>
<title><![CDATA[解决Apache2+PHP上传文件大小限制的问题技术集锦]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 08 Feb 2012 11:24:20 +0000</pubDate> 
<guid>http://jackxiang.com/post/4961/</guid> 
<description>
<![CDATA[ 
	今天找Bobo换回到bo-blog服务器了，发文章试试。<br/>解决Apache2+PHP上传文件大小限制的问题技术集锦<br/><br/>在用PHP进行文件上传的操作中，需要知道怎么控制上传文件大小的设置，而文件可传大小是受到多种因素制约的，现总结如下：<br/><br/>1、php.ini:upload_max_filesize 所上传的文件的最大大小。默认值2M。<br/><br/>2、php.ini:memory_limit 本指令设定了一个脚本所能够申请到的最大内存字节数，默认值8M。如果不需要任何内存上的限制，必须将其设为 -1。如果内存不够，则可能出现错误：Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)(一般导入数据库时，如果数据库太大，就会报错，改这个就可以)<br/><br/>3、php.ini:post_max_size 设定POST数据所允许的最大大小。此设定也影响到文件上传。要上传大文件，该值必须大于 upload_max_filesize。<br/><br/>4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds<br/><br/>5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data<br/><br/>6、如果用到mysql的BLOB进行二进制文件存储，则需要设置my.ini:max_allowed_packet=xxM<br/><br/>7、httpd.conf<br/>&nbsp;&nbsp;&nbsp;&nbsp;在 Apache 里面有一个选项是 LimitRequestBody，这个选项可以限制用户送出的 HTTP 请求内容。这个选项可以在 .htaccess 或 httpd.conf 里使用，而如果在 httpd.conf 内使用，分别可以用在 virtualhost 或目录属性设定。而 LimitRequestBody 的设定值是介乎 0 (无限制) 至 2147483647 (2GB)。<br/>例如要在目录 D:/AppServ/www 设定上传限制为 100K，可以在 .htaccess 或 httpd.conf 加入以下语句：<br/><br/> <br/>LimitRequestBody 1024000000<br/>Options Indexes FollowSymLinks MultiViews ExecCGI<br/>AllowOverride All<br/>Order allow,deny<br/>Allow from all<br/>LimitRequestBody 1024000000<br/>Options Indexes FollowSymLinks MultiViews ExecCGI<br/>AllowOverride All<br/>Order allow,deny<br/>Allow from all<br/>如果透过 .htaccess 设定，储存档案后会立即生效；如透过 httpd.conf 设定，须要重新启动 Apache。<br/><br/>PHP关于文件上传部分，特别提到表单隐藏域：MAX_FILE_SIZE，意思是接收文件的最大尺寸。文档中给出的例子如下：<br/> <br/><br/> <br/>&lt;form enctype=&quot;multipart/form-data&quot; action=&quot;_URL_&quot; method=&quot;POST&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;hidden&quot; name=&quot;MAX_FILE_SIZE&quot; value=&quot;30000&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Send this file: &lt;input name=&quot;userfile&quot; type=&quot;file&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;submit&quot; value=&quot;Send File&quot;&gt;<br/>&lt;/form&gt;<br/>&lt;form enctype=&quot;multipart/form-data&quot; action=&quot;_URL_&quot; method=&quot;POST&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;hidden&quot; name=&quot;MAX_FILE_SIZE&quot; value=&quot;30000&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Send this file: &lt;input name=&quot;userfile&quot; type=&quot;file&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;submit&quot; value=&quot;Send File&quot;&gt;<br/>&lt;/form&gt;<br/><br/>这里设置MAX_FILE_SIZE ＝ 30000，期待一种可能，使得浏览器在传送文件之前能够依此作出预先判断，如果文件尺寸大于30000字节，则不执行实际的POST动作。也就是不往服务器发送文件内容，而是直接在客户端提醒用户“你试图上传的文件超过30000字节”。<br/>这的确是一个非常棒的主张，但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”，而是IE和FireFox这两个主流浏览器都不支持这个特性。PHP的这个建议尚未被采纳。<br/><br/>MAX_FILE_SIZE还有一个用场：后台PHP会判断接收到的文件大小是否大于这个值，如果超出，$_FILES[&#039;thisfile&#039;] [&#039;error&#039;]会被设置为UPLOAD_ERR_FORM_SIZE(2)，同时放弃保存临时文件，将$_FILES[&#039;thisfile&#039;] [&#039;size&#039;]置0。<br/>这个例子，没问题，表现正常，当我试图上传一个40多K的文件时，PHP程序报告“文件超过MAX_FILE_SIZE”。<br/>但是，如果我们将表单中的MAX_FILE_SIZE从30000减少到1000，情形又如何呢？<br/><br/>上传800字节的文件，正常；<br/>上传40K的文件，PHP报告文件过大，也正常；<br/>上传3000个字节的文件，PHP未报告错误，它成功保存了文件！出乎意料！<br/>问题就出在main/rfc1867.c中判断文件是否超长的这部分代码上。php每次从buffer中读取FILLUNIT字节长度的内容后，首先判断“已经读到的内容长度(total_bytes)”是否大于MAX_FILE_SIZE，然后再增加“已经读到的内容长度(total_bytes)”。这样一来，和预计的结果之间至多会有FILLUNIT 字节的误差，而FILLUNIT=1024*5＝5K。（点击bug了解详细内容）<br/>这就是说，当MAX_FILE_SIZE&lt;5K时，上传一个大于MAX_FILE_SIZE，但是小于5K的文件是没有问题的。<br/>当然，因为这个设置很容易被绕过，所以服务器端编程不应当依赖于MAX_FILE_SIZE。而且，5K到底是个很小的数值，对大多数上传文件的表单来说没有影响。<br/><br/> PHP中post_max_size，upload_max_filesize, MAX_FILE_SIZE的设置，和客户端上传给服务器端的流量大小无关。<br/>Apache服务器从客户端接收长度不超过LimitRequestBody字节数的请求，然后传送给php模块，php模块再决定是否保存成临时文件，设置$_FILES全局变量，移交给script进一步处理。<br/>这个Apache的LimitRequestBody选项缺省值=0，允许Request body的最大字节数是2G（Linux + Apache）<br/><br/>最后还要注意的是：<br/>html本身能够post数据也是有限制的，不能超过2G。<br/>FTP客户端有文件偏移指针的2GB边界限制，未使用特殊编译flag编译的ftp服务器端或者客户端，无论在什么FS中都不支持大于2GB的文件。不知道PHP会不会也有这种情况。<br/><br/><br/><br/>来自：http://www.kukaka.org/home/showonews/72
]]>
</description>
</item><item>
<link>http://jackxiang.com/post/4961/#blogcomment63454</link>
<title><![CDATA[[评论] 解决Apache2+PHP上传文件大小限制的问题技术集锦]]></title> 
<author>lucy30712 &lt;kbbsb1986@126.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 17 Feb 2012 13:59:23 +0000</pubDate> 
<guid>http://jackxiang.com/post/4961/#blogcomment63454</guid> 
<description>
<![CDATA[ 
	论坛是交流的地方，没有回帖跟帖，那么你如何跟人交流？不交流，又如何取得进步 <br/>？所以，看完帖子后，无论你感到好还是坏，都请你告诉作者。因为，无论你说什么，都 <br/>比冷漠要强！
]]>
</description>
</item><item>
<link>http://jackxiang.com/post/4961/#blogcomment63674</link>
<title><![CDATA[[评论] 解决Apache2+PHP上传文件大小限制的问题技术集锦]]></title> 
<author>lucy70221 &lt;bapopo88@126.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 24 Feb 2012 22:53:54 +0000</pubDate> 
<guid>http://jackxiang.com/post/4961/#blogcomment63674</guid> 
<description>
<![CDATA[ 
	让人阅毕击掌三叹的好帖
]]>
</description>
</item>
</channel>
</rss>