IIS7.5 + php 解决上传大文件问题!

接手新公司服务器用的是window系统,PHP用iis的fastcgi运行,由于公司网站需要一个上传文件的功能,我采用了开源的webuploader组件进行上传,在本地测试完成可以,打是在服务器上就是不能上传超过30M的文件, 会报500错误,搜索不很多资料终于解决,现在整理下做个备份。


第一步:记得修改php.ini 上传大小限制

(以上传500M以下大小的文件为例) 
查找以下选项并修改-> 
file_uploads = On ;打开文件上传选项 
upload_max_filesize = 500M ;上传文件上限 
如果要上传比较大的文件,仅仅以上两条还不够,必须把服务器缓存上限调大,把脚本最大执行时间变长 
post_max_size = 500M ;post上限 
max_execution_time = 1800 ; Maximum execution time of each script, in seconds脚本最大执行时间 
max_input_time = 1800 ; Maximum amount of time each script may spend parsing request data 
memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)内存上限


第二步:修改iis的上传限制

1、打开“Internet 信息服务(IIS)管理器”;
2、关闭IIS服务;
3、双击“Default Web Site“→双击中间窗格中的“请求筛选”→单击右侧窗格的“编辑功能设置”→修改“请求限制”下面的“允许的最大内容长度”,默认是30M,随便改大一点,我改成300M,点击“确定”;
4、重新启动IIS,再上传试试,50M、90M都可以了。


如果不可以那就必须

修改IIS_schema.xml这个文件要先获得这个文件的控制权;
这里我们要修改权限先要配置这个文件权限,这里我们给文档一个administrators为当前所有者,然后给这个用户所有权限,然后再修改这个配置文件就可以了
进入目录C:/Windows/System32/inetsrv/config/schema,用记事本打开 IIS_schema.xml
查找 <attribute name="maxAllowedContentLength" type="uint" defaultValue="30000000" />
这里的限制,我们需要修改这里的限制大小
然后搜索 3000000 意思是 只允许上传 30MB 大小的文件,你在这后面多加一个0 就变成了 300MB 了就应该够用了。然后重启 IIS 7
<element name="requestLimits">
   <attribute name="maxAllowedContentLength" type="uint" defaultValue="30000000" />
   <attribute name="maxUrl" type="uint" defaultValue="4096" />
  <attribute name="maxQueryString" type="uint" defaultValue="2048" />
  <element name="headerLimits">
  <collection addElement="add" clearElement="clear" removeElement="remove" >
<attribute name="header" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
<attribute name="sizeLimit" type="uint" required="true" />
  </collection>
</element>
大约在1024行左右.

如果还是不可以那再进行下一步

打到%windir%\system32\inetsrv\config\applicationhost.config ,然后单击 打开 。
在 该 ApplicationHost.config 文件中找不到maxAllowedContentLength 属性。 那么自己添加一个值,使客户端发送作为请求的一部分的内容长度标头的大小相同。 默认情况下, maxAllowedContentLength 属性的值是 30000000。帮助信息说到maxAllowedContentLength 的默认大不为30M。
这时明白 web.config文件中设定的是针对某个WEB站点.而非全部站点的上传大小。在当applicationhost.config 中未对maxAllowedContentLength 设定大小时默认就是30M,在web.config中设定超过于30M,依然上传最大为30M。然而在applicationhost.config未找 到节点,那么自己试着在system.webServer中添加此节点,一定要在system.webServer里设置。
<system.webServer>
  <security>
<requestFiltering >
 <requestLimits maxAllowedContentLength="1073741824" ></requestLimits>
</requestFiltering>
  </security>
</system.webServer>


第三步:修改网站的web.config

<system.web>
        <httpRuntime executionTimeout="28800" maxRequestLength="2147483645" shutdownTimeout="28800" />
</system.web>


第四部:修改IIS的fastcgi配置

在IIS主界面找到“FastCGI”相关选项,双击进入


右击点击编辑:


把活动超时和请求超时改成您想要的时间



基本经过这几部, IIS7.5+php 就可以上传大文件了!


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页